1

就在我以为我已经完成了国际化和时区并且终于可以继续使用更有趣的功能时,我最后一次被咬了。:)

在我的模板中,只要我有以下内容,模板就会自动将日期时间从 UTC 转换为我当前选择的时区。而且我还可以切换到不同的文化(美国到英国格式),日期和时间格式也会相应改变。简直完美。

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime }}</td>
     <td>{{ item.conversation_datetime }}</td>
{% endfor %}

现在我需要做的就是提取前者的本地化日期和后者的本地化时间。所以我想让我们在那里打一个模板标签,生活是美好的。

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date }}</td>
     <td>{{ item.conversation_datetime|time }}</td>
{% endfor %}

但如果生活是美好的,我就不会坐在这里写这篇文章了,对吗?;) 设置这些过滤器的那一刻,这两个字段的格式似乎已固定为美国文化。日期格式为 mm/dd/yyyy,时间为上午/下午 12 小时。

像我之前成功选择的英国语言不再有任何效果。

事实上,我已经覆盖了formats.pyen并且en-gb可以确认en/format.py 具有TIME_FORMAT = 'P'对应于上午/下午12 小时的条目。

而 en_GB/formats.pyTIME_FORMAT = 'G:i'对应于 24 小时。您是否认为在我忽略的模板中使用过滤器标签还有其他意义?

4

1 回答 1

1

编辑:第二种方法是解决方案。另请参阅下面的评论。

文档中确实提到了您观察到的行为(请参阅日期过滤器):

不使用格式字符串时:将使用设置中{{ value|date }}定义的格式字符串,不应用任何本地化DATE_FORMAT

time过滤器也是如此。从我在文档中可以看到,您可以使用localize过滤器强制本地化:

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date|localize }}</td>
     <td>{{ item.conversation_datetime|time|localize }}</td>
{% endfor %}

或者,您可以传递您希望使用的设置(解决方案):

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date:"DATE_FORMAT" }}</td>
     <td>{{ item.conversation_datetime|time:"TIME_FORMAT" }}</td>
{% endfor %}

该文档对此进行了说明:

传递的格式可以是预定义的DATE_FORMAT、或之一DATETIME_FORMAT,也可以是使用上表中显示的格式说明符的自定义格式。请注意,预定义的格式可能因当前语言环境而异。SHORT_DATE_FORMATSHORT_DATETIME_FORMAT

于 2012-08-30T12:44:30.037 回答