使用ifchanged模板标记和时区感知日期时间字段

时间:2013-03-11 22:16:39

标签: django django-templates

我的模板中有以下内容:

{% for showtime in showtimes %}
{% ifchanged showtime.start.day %}
<h3>{{ showtime.start|date:"M d" }}</h3>
{% endifchanged %}

showtime.start是一个时区感知的DateTimeField。问题是 showtime.start.day 以UTC格式返回日期,而 showtime.start | date:“M d”在上下文时区中打印日期。

我尝试了以下内容:

{% ifchanged showtime.start|date:"M d" %}

失败,因为ifchanged无法处理过滤器的参数(即使在1.5中)。我尝试过玩时区和当地时间,例如。

{% load tz %}
{% timezone TIME_ZONE %}
{% for showtime in showtimes %}
{% ifchanged showtime.start.day %}
<h3>{{ showtime.start|date:"M d" }}</h3>
{% endifchanged %}
{% endtimezone %}

正如所料,那些不起作用。有没有办法在日期时间的时间版本上进行ifchanged工作,还是需要自定义过滤器?

1 个答案:

答案 0 :(得分:0)

不幸的是,我找到的唯一方法是使用自定义模板标记:

{% ifchanged showtime.start|localtime|year_month_day %}

所以我使用localtime过滤日期,然后自定义模板标签在适当的时区返回年,月和日,所以ifchanged可以工作。

@register.filter()
def year_month_day(value):
    return "%d-%d-%d" % (value.year, value.month, value.day)