代码之家  ›  专栏  ›  技术社区  ›  Tom Gruff

为什么Django的时间过滤器在默认情况下不采用时间格式?

  •  1
  • Tom Gruff  · 技术社区  · 14 年前

    使用 {{today|time:"TIME_FORMAT"}} 正确地本地化我在Django1.2.3项目中切换语言的时间。例如,我看到的英语 "12:19 a.m." 当我切换到德语时,它变为 "12:19:25" .

    从查看文档和代码可以看出( defaultfilters.py formats.py 只是使用 {{today:time}} 应该做同样的事情,默认为 TIME_FORMAT 但这不起作用,它总是使用默认的英语格式。

    有没有办法避免编辑所有模板并将其更改为 今天时间:“时间格式” ?

    同样的事情也发生在 date 过滤器和 DATE_FORMAT .

    2 回复  |  直到 14 年前
        1
  •  3
  •   Ned Batchelder    14 年前

    医生说(强调我的):

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

     {{ value|time }}
    

    …将使用“时间格式”设置中定义的格式字符串, 不应用任何本地化 .

    您有两种选择:

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

    2. 创建一个你自己的过滤器,按照你想要的方式进行过滤。

        2
  •  1
  •   Tom Gruff    14 年前

    感谢@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")