不重启服务器,Datetime不更新被指定为默认参数



我遇到了另一个奇怪的行为,不确定为什么会发生…

我不会完全写我在做什么,基本上我有一个视图2种情况:默认情况下,当搜索采取今天的日期默认情况下,如果没有指定,第二个是我指定什么日期,我想看到并得到一个查询…

这里是url。py:
    url(r'^$', index),
    url(r'^(?P<month>d{1,2})/(?P<day>d{1,2})/(?P<change>prev|next)/$', index),

这里是views.py:

def index(request, month = date.today().month, day = date.today().day, change=None):
    # apply next / previous change
    if change in ("next", "prev"):
        now, mdelta = date(date.today().year, int(month), int(day)), timedelta(days=1)
        if change == "next":   mod = mdelta
        elif change == "prev": mod = -mdelta
        month, day = (now+mod).timetuple()[1:3]
    someData= SomeModel.objects.filter(
        date__exact = date(date.today().year, int(month), int(day))
    )
    return render_to_response('someapp_index.html',RequestContext(request,{'next':request.path, 'someData':someData, 'month': month, 'day':day}))

发生的事情是,由于某种原因,当24小时过去,第二天来了,someData没有更新到第二天。因此,例如,如果今天是15和24小时过去了,并且已经是16,那么您期望在刷新时someData将被1月16日过滤,但它仍然被15过滤,因为月和日从我启动或重新启动uwsgi服务器....的那一刻起保持不变? ! ? ! ? ! ? ! ?

我试着把那些日期。今天().dat/月作为变量传递在url文件,它有绝对相同的效果....

我是唯一一个有这个问题的人,它不应该发生,或者它应该表现得像这样,你不能放date.today()对象吗?

def index(request, month = date.today().month, day = date.today().day, change=None):
                                ^^^^^^ called upon init   ^^^^^^ 

是的,你的月/日值在服务器初始化时初始化。

如果您想要默认值,将它们设置为None,如果它们是None,则在视图中调用date.today()

date.today()作为参数传递给函数将强制对其进行求值。这与向函数传递一个特定的值相同。

改变

def index(request, month=None, day=None, change=None):
      if month is None:
          month = date.today().month

最新更新