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

时间:2015-09-28 20:15:46

标签: python django

我的模型中有2个字段名为餐厅,如下所示:

        UIImageWriteToSavedPhotosAlbum(newImage, nil, nil, nil)

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

start_time = models.TimeField(blank=True)
end_time = models.TimeField(blank=True)

在我的模板中我有:

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

我正在尝试查看是否有一个模板标记可用于检查当前时间是否介于{% 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 %} start_time之间,然后显示{ {1}}按钮,否则不显示。

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

尝试1:

end_time

3 个答案:

答案 0 :(得分:4)

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

def is_open(self):
    return self.start_time <= datetime.datetime.now().time() < self.end_time

并检查模板中的{% if restaurant.is_open %}

或者,您可以更改查询,以便它只返回已打开的餐馆:

now = datetime.datetime.now().time()
restaurants = Restaurant.objects.filter(
    location__icontains=location,
    start_time__lte=now,
    end_time__gte=now
)

答案 1 :(得分:4)

我不会使用模板标记,因为这是业务逻辑的一部分。 例如,考虑在模型中添加属性:

class Restaurant(models.Model):

    @property
    def is_open(self):
        now = datetime.datetime.now().time()
        return self.start_time() <= now <= self.end_time()

这样,您已在模型级别定义了可靠的业务规则,并且能够在模板中使用它:

{% if r.is_open %}
    <a>your link</a>
{% endif %}

答案 2 :(得分:1)

我认为您试图寻找的模板标签不存在。但好消息是您可以为Restaurant模型实例创建自己的方法或属性。

只需在餐厅模型中创建一个方法,该方法应执行以下操作:

import datetime

from django.db import models

class Restaurant(models.Model):
    start_time = models.TimeField(blank=True)
    end_time = models.TimeField(blank=True)

    def is_open_now(self):
        return self.start_time <= datetime.datetime.now() < self.end_time

然后,在您的模板上:

{% if restaurant %}
    <ul class="list-group">
        {% for r in restaurant %}
            <li class="list-group-item">
                <h5>
                    <legend>{{ r.restaurant_name|capfirst }}</legend>
                    {% if r.restaurant.is_open_now %}
                        <a href="/order/#/showmenu/{{ r.id }}" type="button" class="btn btn-primary pull-right">View Menu</a>
                    {% endif %}
                </h5>
            </li>
        {% endfor %}
    </ul>
{% endif %}
相关问题