为什么Django的时间过滤器默认情况下不会拾取TIME_FORMAT?

时间:2010-10-15 00:51:39

标签: python django localization internationalization

在我的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 个答案:

答案 0 :(得分:3)

文档说(强调我的):

  

在没有格式字符串的情况下使用时:

 {{ value|time }}
     

...将使用TIME_FORMAT设置中定义的格式字符串,而不应用任何本地化

您有两种选择:

  1. 编辑所有模板以进行更改,或

  2. 创建一个自己的新过滤器,以您想要的方式完成。

答案 1 :(得分:1)

感谢@Ned Batchelder,根据选项2.,我已将以下内容添加到我的自定义模板标记文件中:

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")