【问题标题】:How do I change the view a URL resolves to after a certain date?如何更改 URL 在特定日期后解析的视图?
【发布时间】: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


【解决方案1】:

您无需尝试破解您的 urls.py 即可完成此操作。设置一个指向如下视图的 URL 模式:

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 和视图负责委托显示的内容(你知道,视图

(请注意,此示例意味着您将相应地更改模型并导入所有正确的库等。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多