Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 内置模板标记似乎破坏了i18n_Python_Django_Localization_Django Templates_Django 1.4 - Fatal编程技术网

Python 内置模板标记似乎破坏了i18n

Python 内置模板标记似乎破坏了i18n,python,django,localization,django-templates,django-1.4,Python,Django,Localization,Django Templates,Django 1.4,就在我以为我已经完成了国际化和时区的学习,终于可以继续学习更有趣的功能时,我最后一次被咬了 在我的模板中,只要我有以下内容,模板就会自动将日期时间从UTC转换为我当前选择的时区。我也可以切换到不同的文化(从美国到英国的格式),日期和时间格式也会相应地改变。简直完美 {% load l10n %} {% for item in calls %} <td>{{ item.conversation_datetime }}</td> <td>{{

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

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

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime }}</td>
     <td>{{ item.conversation_datetime }}</td>
{% endfor %}
{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime}
{{item.conversation_datetime}
{%endfor%}
现在,我需要做的就是提取前者的本地化日期和后者的本地化时间。所以我想,让我们在那里敲打一个模板标签,生活是美好的

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date }}</td>
     <td>{{ item.conversation_datetime|time }}</td>
{% endfor %}
{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime|date}
{{item.conversation_datetime | time}
{%endfor%}
但如果生活是美好的,我就不会坐在这里写这篇文章了,是吗?;) 设置这些过滤器的那一刻,这两个字段的格式似乎已固定为美国文化。日期格式为mm/dd/yyyy,时间为12小时am/pm

像我以前那样成功地选择了英国语言,现在已经没有任何效果了

事实上,我已经覆盖了
en
en gb
的formats.py,并且可以确认en/format.py的条目
TIME\u format='p'
,对应于12小时am/pm

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

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

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

在没有格式字符串的情况下使用时:
{{value | date}
将使用在
date_格式
设置中定义的格式字符串,而不应用任何本地化

对于
时间
过滤器也提到了这一点。从我在文档中看到的情况来看,您可以使用
localize
过滤器强制本地化:

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date|localize }}</td>
     <td>{{ item.conversation_datetime|time|localize }}</td>
{% endfor %}
{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime | date | localize}}
{{item.conversation_datetime | time | localize}}
{%endfor%}
或者,您可以传递希望使用的设置(解决方案):

{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime|date:“date_FORMAT”}
{{item.conversation_datetime | time:“time_FORMAT”}
{%endfor%}
文件中说:

传递的格式可以是预定义的
DATE\u格式
DATETIME\u格式
SHORT\u DATE\u格式
SHORT\u DATETIME\u格式
,也可以是使用上表所示格式说明符的自定义格式。请注意,预定义格式可能因当前区域设置而异


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

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

在没有格式字符串的情况下使用时:
{{value | date}
将使用在
date_格式
设置中定义的格式字符串,而不应用任何本地化

对于
时间
过滤器也提到了这一点。从我在文档中看到的情况来看,您可以使用
localize
过滤器强制本地化:

{% load l10n %}
{% for item in calls %}
     <td>{{ item.conversation_datetime|date|localize }}</td>
     <td>{{ item.conversation_datetime|time|localize }}</td>
{% endfor %}
{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime | date | localize}}
{{item.conversation_datetime | time | localize}}
{%endfor%}
或者,您可以传递希望使用的设置(解决方案):

{%loadL10n%}
{%用于调用%中的项}
{{item.conversation_datetime|date:“date_FORMAT”}
{{item.conversation_datetime | time:“time_FORMAT”}
{%endfor%}
文件中说:

传递的格式可以是预定义的
DATE\u格式
DATETIME\u格式
SHORT\u DATE\u格式
SHORT\u DATETIME\u格式
,也可以是使用上表所示格式说明符的自定义格式。请注意,预定义格式可能因当前区域设置而异


您使用的是哪种Django版本?您使用的是哪种Django版本?我感谢您的帮助Simeon,我知道大多数人都回避这些话题。:)我已经尝试了你的两种解决方案。第一个与之前完全相同->忽略文化固定格式。第二个更好,什么也没有出现。日期和时间都是空的。今天下午我将创建一个小沙盒应用程序来演示这个问题。我还发现Django1.5有一个名为LocalTime的新标记。Django男孩似乎意识到了这个缺点。但他们似乎忘记了本地日期@卡夫:我真的希望这些解决方案中的一个能奏效。我必须说我是基于文档的,因为我还没有在我的项目中遇到这个特殊的问题。如果你真的找到了解决办法,最好把它贴在这里。否则,您可以创建一个解决方案。如果真的没有简单的方法,那么最好让Django开发人员知道。嗨,Simeon,很抱歉,完成演示花了更长的时间。我现在创建了一个小应用程序来演示这个问题。如果你有时间看一看,请。我在主页上清楚地看到了它的工作原理。:)如果你能证实你也遇到了同样的问题,那么对我来说,这是一个很好的候选人,可以提出一个错误通知单DHi,经过一段漫长的路,并将此作为bug提交,我找到了解决方案。您建议使用
项。对话|日期|日期:“日期|格式”
这确实不起作用。但你们很接近。它应该是
项。对话_datetime |日期:“日期_格式”
:)请