为什么Django的时间过滤器默认不使用TIME_FORMAT?
在我的Django 1.2.3项目中,使用{{today|time:"TIME_FORMAT"}}
可以正确地根据我切换的语言来显示时间。比如说,当我选择英语时,看到的是"12:19 a.m."
,而切换到德语后,它就变成了"12:19:25"
。
根据我查看文档和代码的情况(defaultfilters.py
和 formats.py
),我本以为只用{{today:time}}
就能实现同样的效果,并且默认使用TIME_FORMAT
,但这并没有生效,它总是使用默认的英语格式。
有没有办法避免我需要编辑所有模板,把它们都改成{{today|time:"TIME_FORMAT"}}
呢?
同样的情况也发生在date
过滤器和DATE_FORMAT
上。
2 个回答
3
文档中提到(我强调的部分):
当不使用格式字符串时:
{{ value|time }}
...将会使用在 TIME_FORMAT 设置中定义的格式字符串,而不会进行任何本地化处理。
你有两个选择:
修改你所有的模板来进行更改,或者
创建一个你自己的过滤器,以你想要的方式来处理。
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")