建立模板标签似乎破坏了国际化功能

2024-05-20 22:04:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在我的模板中,只要我有以下内容,模板就会自动将datetime从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小时am/pm。你知道吗

像我以前那样成功地选择了英国语言已经没有任何效果了。你知道吗

事实上我已经超越了格式.py对于enen-gb可以确认/格式.py具有对应于12小时am/pm的条目TIME_FORMAT = 'P'。你知道吗

而英国/格式.py具有对应于24小时的TIME_FORMAT = 'G:i'。 你认为在模板中使用过滤标签还有一点我忽略了吗?你知道吗


Tags: inpy模板fordatetime格式时间load
1条回答
网友
1楼 · 发布于 2024-05-20 22:04:29

编辑:第二种方法是解决方案。另见下面的评论。你知道吗

文档中确实提到了您观察到的行为(参见date filter):

When used without a format string: {{ value|date }} the formatting string defined in the DATE_FORMAT setting will be used, without applying any localization.

对于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 %}

文件上说:

The format passed can be one of the predefined ones DATE_FORMAT, DATETIME_FORMAT, SHORT_DATE_FORMAT or SHORT_DATETIME_FORMAT, or a custom format that uses the format specifiers shown in the table above. Note that predefined formats may vary depending on the current locale.

相关问题 更多 >