如何在Django中使用带有日期过滤器的本地化模板标签



根据Django文档,localize-template标记允许对模板中的本地化进行更细粒度的控制,而不是常规的USE_L10N=True设置。

但是,当与日期过滤器结合使用时,启用localize不会产生与设置USE_L10N=True相同的结果。

# USE_L10N = True in settings.py
{% load l10n %}
{{some_datetime_value|date}}
# Date is shown and localized

# USE_L10N = False in settings.py
{% load l10n %}
{% localize on %}
{{some_datetime_value|date}}
{% endlocalize %}
# Date is shown and NOT localized

为什么这两个结果不同?如何结合日期过滤器使本地化标记正确本地化?

正如Brian Destura在评论中指出的那样,这看起来像是一个Django错误。

在将日期时间对象传递给模板之前,将其转换为日期对象可能适用于单个对象,但如果必须访问存储为日期时间的模型字段(例如在for循环中(,则会非常不方便。

如果有人面临同样的问题,一个将日期时间对象转换为日期对象的自定义过滤器对我来说很有效(这实际上是内置日期过滤器应该做的(。

custom_tags.py

@register.filter
def get_date(value):
return value.date()

template.html

{% load i10n %}
{% load custom_tags %}
{% localize on %}
{{some_datetime_value|get_date}}
{% endlocalize %}
#localizes the format correctly

最新更新