我的模型中有两个名为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)
这不是你会用模板标签做的事情。一种选择是在 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)
| 归档时间: |
|
| 查看次数: |
1663 次 |
| 最近记录: |