【问题标题】:How can I use localize template tag with date filter in Django?如何在 Django 中使用本地化模板标签和日期过滤器?
【发布时间】:2022-01-04 09:43:48
【问题描述】:

根据 Django docs,与一般的 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

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

【问题讨论】:

  • 你能分享如果你这样做会发生什么{{ some_datetime_value | localize }}
  • @BrianDestura,使用本地化过滤器正确本地化格式。我尝试将它与日期过滤器链接起来(它只返回来自日期时间对象的日期),但这不起作用。
  • 看起来像一个带有日期过滤器的 django 错误。我想现在您可以从some_datetime_value 中提取日期,然后再将其传递给模板以使其正常工作并避免使用日期过滤器
  • 如果不使用日期过滤器会怎样?
  • @user14665310,没有日期过滤器本地化按预期工作。

标签: django django-templates


【解决方案1】:

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

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

如果有人遇到同样的问题,将日期时间对象转换为日期对象的自定义过滤器对我有用(这实际上是内置日期过滤器应该做的)。

custom_tags.py

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

模板.html

{% load i10n %}
{% load custom_tags %}

{% localize on %}
{{some_datetime_value|get_date}}
{% endlocalize %}

#localizes the format correctly

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-16
    • 2011-08-01
    • 2020-02-16
    • 2011-05-09
    • 2013-03-01
    • 2016-07-06
    • 2022-01-22
    • 2019-09-28
    相关资源
    最近更新 更多