【问题标题】:Using ifchanged template tag with timezone aware datetime fields将 ifchanged 模板标签与时区感知的日期时间字段一起使用
【发布时间】:2013-02-27 06:56:44
【问题描述】:

我的模板中有以下内容:

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

【问题讨论】:

标签: django django-templates


【解决方案1】:

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

{% 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)

【讨论】:

    猜你喜欢
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2020-12-03
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多