0

私が遭遇した別の奇妙な動作で、なぜそれが起こるのかよくわかりません...

私がやっていることを完全には書きませんが、基本的には 2 つのケースに対して 1 つのビューがあります: 何も指定されていない場合、検索がデフォルトで今日の日付を取得するデフォルトのケース、および 2 番目は、表示したい日付を指定してクエリを取得する場所です。 ...

だからここにurls.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サーバーを再起動しました.... ?!?!?!?!?

これらの date.today().dat/month を url file に渡される変数として入れてみましたが、まったく同じ効果がありました....

この問題を抱えているのは私だけで、発生しないはずですか、それともこのように動作し、date.today() オブジェクトを配置できませんか?

4

1 に答える 1

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

はい、月/日の値はサーバーの初期化で初期化されます。

デフォルトが必要な場合はに設定し、デフォルトが必要な場合はビューNoneを呼び出します。date.today()None

関数に引数として渡すdate.today()と、関数が強制的に評価されます。これは、関数に1つの特定の値を渡すことと同じです。

への変更

def index(request, month=None, day=None, change=None):
      if month is None:
          month = date.today().month
于 2013-01-16T00:29:49.600 に答える