【问题标题】:Turn down webpage depending on time of day (DJANGO)根据一天中的时间关闭网页(DJANGO)
【发布时间】:2012-08-31 08:54:42
【问题描述】:

我如何使用 django 模板根据一天中的时间删除页面的内容?

我正在创建一个在线食品配送网站。交货单按时间划分。

例如,对于下午 7 点的交货下降,我希望页面正常显示到当天下午 6 点。然后在下午 6 点 01 分,我希望页面显示“此交货时间不可用”之类的内容

【问题讨论】:

    标签: django datetime django-templates


    【解决方案1】:

    说实话,如果您想防止不需要的行为,您不应该依赖模板逻辑。

    你可以创建两个变量,例如

    from django.conf import settings 
    
    TIME_OPEN = getattr(settings, 'TIME_OPEN', datetime.now().replace(hour=10, minute=30, second=0, microsecond=0).time())
    TIME_CLOSED = getattr(settings, 'TIME_CLOSED', datetime.now().replace(hour=21, minute=30, second=0, microsecond=0).time())
    

    在您的 url 模式中,您可以添加如下内容:

    if TIME_OPEN < datetime.now().time() < TIME_CLOSED:
        urlpatterns += patterns('shop.customers.views',
        (r'^checkout/$', 'checkout'),
    )
    

    根据您的新变量,您可以添加一个 context_processor,它为 UI 逻辑的每个模板提供上下文变量,例如{'shop_open': True}.

    请注意,这些示例依赖于服务器时间,因此您必须检查一下,因为它可能与您的本地计算机不同。另一种方法是创建一个装饰器,它可以包裹在需要特定时间的视图周围。

    所以,只是为了确保;不要依赖模板逻辑,保护你的视图

    【讨论】:

    • datetime.now().time() 会返回请求的时间而不是 urls.py 模块初始化的时间吗?
    • 我同意应该从模板中删除时间逻辑,但任何与datetime.now() 的比较都属于视图,而不是urls.py。 URL 模式仅在服务器启动时加载一次。通过将比较放在urls.py 中,datetime.now() 将对应于加载urls.py 模块的日期时间,而不是请求的时间。
    • @Alasdair 我建议使用装饰器作为视图层方法,我同意这样更清洁
    • 如何创建装饰器?
    • 查看文档docs.djangoproject.com/en/dev/topics/http/decorators 并浏览 django 源代码以了解它们是如何工作的
    猜你喜欢
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2021-09-01
    • 1970-01-01
    • 2021-10-03
    • 2012-01-28
    • 2011-06-21
    相关资源
    最近更新 更多