【发布时间】:2014-05-26 23:01:04
【问题描述】:
我正在编写一个竞赛应用程序。比赛在特定日期的午夜结束。我想让应用程序自动切换:使用CookieWizardView,从formtools;从通用视图库到普通的TemplateView。
目前我的 urlpatterns 的相关部分如下所示:
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'),
)
不过,我确实必须在我的比赛关闭视图中添加一个功能,因为它没有期待一个 POST,如果有人试图在午夜填写比赛表格,这可能会发生:
class ContestClosedView(TemplateView):
template_name = "appname/closed.html"
def post(self, *args, **kwargs):
return self.get(*args, **kwargs)
contestclosed = ContestClosedView.as_view()
【问题讨论】:
-
为什么不直接比较视图本身的日期并更改渲染的模板(以及使用什么上下文)??
标签: django django-urls django-1.5 url-pattern django-formwizard