0

我的模板中有以下内容:

{% 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 在日期时间的时区版本上工作,还是我需要自定义过滤器?

4

1 回答 1

0

不幸的是,我发现的唯一方法是使用自定义模板标签:

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

因此,我使用本地时间过滤日期,然后自定义模板标签返回正确时区的年、月和日,因此 ifchanged 有效。

@register.filter()
def year_month_day(value):
    return "%d-%d-%d" % (value.year, value.month, value.day)
于 2014-01-21T21:21:37.323 回答