URLが一定日以降に解決されるビューを変更するにはどうすればよいですか。
-
21-12-2019 - |
質問
私はコンテストアプリを書いています。コンテストは特定の日付の真夜中に閉まります。 CookieWizardView
から、formtools
を使用してからアプリが自動的に切り替わりたいです。一般的なビューライブラリから、通常のTemplateView
に。
現在の私のURLPatternの関連部分は次のようになります:
urlpatterns += patterns('',
url(r'^$', 'appname.views.contest'), # the CookieWizardView
)
.
そして一定日の後、それがこのように見えるかのように機能するようにそれを好きです:
urlpatterns += patterns('',
url(r'^$', 'appname.views.contestclosed'), # a TemplateView
)
.
私は完全に完全に罰金を持つことで罰金を持つことで、その日の真夜中に上がりたくない!
~~
これは解決しましたが、私は新しい質問に答えることができません。
私は私のviews.py
に関数を作りました:
def contest_switcher(request):
if datetime.datetime.now() < datetime.datetime(YEAR_OVER, MONTH_OVER, DAY_OVER):
return contest(request)
else:
return contestclosed(request)
.
これはトリックをしています、今私のURLPatternは次のとおりです。
urlpatterns += patterns('',
url(r'^$', 'appname.views.contest_switcher'),
)
.
私は私のコンテストの閉じた景色に関数を追加しなければなりませんでしたが、それは投稿を期待していなかったので、誰かが真夜中のコンテストフォームに記入しようとしているならば起こるかもしれません:
class ContestClosedView(TemplateView):
template_name = "appname/closed.html"
def post(self, *args, **kwargs):
return self.get(*args, **kwargs)
contestclosed = ContestClosedView.as_view()
. 解決
これをオフにするためにurls.py
をハッキングしようとする必要はありません。このようなビューを指すURLパターンを1つ設定します。
def contest_page(request, contest_id):
try:
contest = Contest.objects.get(pk=contest_id)
except Contest.DoesNotExist:
raise Http404 # minimum necessary - you can do better
if datetime.datetime.now() < contest.end_date: # model field rather than module constants
return contest(request, contest_id) # CookieWizardView
else:
return contestclosed(request, contest_id) # TemplateView
.
これは基本的に改良されたcontest_switcher
です:
- 複数のコンテストに適用されます
- コンテストは自分の終わり日を知っているので、あなたは定数のモジュールの範囲を乱雑にしないように
- 単純な
urls.py
とビューは、表示されているものを委任すること(あなたは知っている、 view ) を委任します。
(この例では、モデルを対応してモデルを変更し、正しいライブラリなどをすべてインポートすることを意味します。)
所属していません StackOverflow