就在我认为我已经完成了国际化和时区的时候,我终于可以继续使用更有趣的功能了,最后一次我被咬了。 :)
在我的模板中,只要我有以下内容,模板会自动将日期时间从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点/下午。
在成功之前选择英国语言不再有任何影响。
事实上,我已覆盖en
和en-gb
的formats.py,并且可以确认en / format.py的条目TIME_FORMAT = 'P'
对应于12小时/时。
虽然en_GB / formats.py的TIME_FORMAT = 'G:i'
对应24小时。
您是否认为在我忽略的模板中使用过滤器标签还有其他一点?
答案 0 :(得分:1)
编辑:第二种方法是解决方案。另见下面的评论。
您观察到的行为确实在文档中提到过(请参阅date filter):
在没有格式字符串的情况下使用时:
{{ 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_FORMAT
或SHORT_DATETIME_FORMAT
,也可以是使用表格中显示的格式说明符的自定义格式以上。 请注意,预定义格式可能会因当前区域设置而异。