Django 模板检查当前时间是否介于开始时间和结束时间之间

Abh*_*hek 2 python django

我的模型中有两个名为Restaurant 的字段,如下所示:

start_time = models.TimeField(blank=True)
end_time = models.TimeField(blank=True)
Run Code Online (Sandbox Code Playgroud)

我有一个视图,其中我正在过滤我的模型以向我的模板提供一个列表,如下所示:

restaurants = Restaurant.objects.filter(location__icontains = location)
return render_to_response('restaurant.html', { 'user': request.user, 'restaurant': restaurants }, RequestContext(request))
Run Code Online (Sandbox Code Playgroud)

在我的模板中,我有:

{% if restaurant %}
    <ul class="list-group">
        {% for r in restaurant %}
            <li class="list-group-item">
                <h5>
                    <legend>{{ r.restaurant_name|capfirst }}</legend>
                    <a href="/order/#/showmenu/{{ r.id }}" type="button" class="btn btn-primary pull-right">View Menu</a>
                </h5>
            </li>
        {% endfor %}
    </ul>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

我正在尝试查看是否有一个模板标签可用于检查当前时间是否介于 mystart_time和之间end_time,然后显示View Menu按钮,否则不显示。

如果我能找到,我已经阅读了文档,但也许我错过了。任何帮助将不胜感激。

尝试 1:

>>> s = Restaurant.objects.all()
>>> s[0].is_open()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/xxx/myapp/models.py", line 64, in is_open
    return self.start_time <= datetime.datetime.now().time < self.end_time
TypeError: can't compare datetime.time to builtin_function_or_method
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

这不是你会用模板标签做的事情。一种选择是在 Restaurant 模型上提供一种方法:

def is_open(self):
    return self.start_time <= datetime.datetime.now().time() < self.end_time
Run Code Online (Sandbox Code Playgroud)

并签{% if restaurant.is_open %}入模板。

或者,您可以更改查询,使其仅返回开放的餐厅:

now = datetime.datetime.now().time()
restaurants = Restaurant.objects.filter(
    location__icontains=location,
    start_time__lte=now,
    end_time__gte=now
)
Run Code Online (Sandbox Code Playgroud)