为什么Django的时间过滤器默认不使用TIME_FORMAT?

1 投票
2 回答
531 浏览
提问于 2025-04-16 05:31

在我的Django 1.2.3项目中,使用{{today|time:"TIME_FORMAT"}}可以正确地根据我切换的语言来显示时间。比如说,当我选择英语时,看到的是"12:19 a.m.",而切换到德语后,它就变成了"12:19:25"

根据我查看文档和代码的情况(defaultfilters.pyformats.py),我本以为只用{{today:time}}就能实现同样的效果,并且默认使用TIME_FORMAT,但这并没有生效,它总是使用默认的英语格式。

有没有办法避免我需要编辑所有模板,把它们都改成{{today|time:"TIME_FORMAT"}}呢?

同样的情况也发生在date过滤器和DATE_FORMAT上。

2 个回答

3

文档中提到(我强调的部分):

当不使用格式字符串时:

 {{ value|time }}

...将会使用在 TIME_FORMAT 设置中定义的格式字符串,而不会进行任何本地化处理

你有两个选择:

  1. 修改你所有的模板来进行更改,或者

  2. 创建一个你自己的过滤器,以你想要的方式来处理。

1

谢谢 @Ned Batchelder,按照第二种选择,我在我的自定义模板标签文件中添加了以下内容:

from django.template.defaultfilters import date as defaultfilters_date, time as defaultfilters_time

# FORCE {{...|date}} to be equivalent to {{...|date:"DATE_FORMAT"}} so it localizes properly, ditto for time and TIME_FORMAT

@register.filter(name="date")
def date_localized(val, arg=None):
    return defaultfilters_date(val, arg or "DATE_FORMAT")

@register.filter(name="time")
def time_localized(val, arg=None):
    return defaultfilters_time(val, arg or "TIME_FORMAT")

撰写回答