Django模板-根据一天中的时间隐藏内容

Django模板-根据一天中的时间隐藏内容,django,django-templates,Django,Django Templates,如果时间不是工作日的09:00到17:00之间,我想在我的模板(base.html)中隐藏一个块 我的想法是(非常简单): 有可能吗?我建议在视图.py中创建一个标志 import datetime # In view now = datetime.datetime.now() call_us_now = False if 9 < now.hour < 17: call_us_now = True # Send 'call_us_now' to context 我想在ba

如果时间不是工作日的09:00到17:00之间,我想在我的模板(base.html)中隐藏一个块

我的想法是(非常简单):


有可能吗?

我建议在
视图.py中创建一个标志

import datetime

# In view
now = datetime.datetime.now()
call_us_now = False
if 9 < now.hour < 17:
   call_us_now = True

# Send 'call_us_now' to context

我想在base.html上使用这段代码,所以可能有点困难 在每个视图上实现代码

编写自定义
模板上下文处理器
。您可以将此作为起点:

from datetime import datetime, time

from django.conf import settings

def calling_flag(request):
    """ Sets the flag in the template if the current time is between CALL_HOURS """
    if settings.CALL_HOURS:
        now = datetime.now().time()
        start_time,end_time = settings.CALL_HOURS
        start_time = time(start_time[:2],start_time[-2:])
        end_time = time(end_time[:2],end_time[-2:])
        return {'IN_TIME': start_time <= now <= end_time}
最后,再次在
settings.py
中添加您的时间范围:

TEMPLATE_CONTEXT_PROCESSORS = (
    # -- your other context processors
    'feedback.custom_template_flags.calling_flag',
)
CALL_HOURS = ('0900','1700')

现在,所有模板都将有
{{IN_TIME}}
,这将是
True
False

我想在我的base.html上使用这段代码,所以在每个视图上实现您的代码可能有点困难?好吧,据我所知,您不能在if语句中使用
{%Now%}
。如果你在上下文中有今天的日期,你可以使用它。就我个人而言,我会查看上下文处理器tehn并将该标志添加到所有页面看起来不错!是否可以检查它是否也是工作日?(星期一至五)
TEMPLATE_CONTEXT_PROCESSORS = (
    # -- your other context processors
    'feedback.custom_template_flags.calling_flag',
)
CALL_HOURS = ('0900','1700')