为什么在i18n blocktrans(django)中,对象,字典或列表不起作用?

时间:2012-07-05 05:08:38

标签: python django internationalization django-templates

我正在使用django i18n来支持i18n。我发现在django blocktrans一个对象,dict直接不起作用。

例如,如果我有一个名为obj的对象,我尝试使用它像

{% blocktrans %} My name is {{ obj.name }} {% endblocktrans %}

不起作用,但如果我像

一样使用它
{% blocktrans with name=obj.name %} My name is {{ name }} {% endblocktrans %}

会奏效。

我只是想知道为什么第一个例子没有用,但第二个有效。

2 个答案:

答案 0 :(得分:2)

Django的blocktrans被传递给ugettext,它将它们标记为u“我的名字是%(名称)s”形式的翻译字符串,在运行时将其作为映射处理,即“u”我的名字是%(name)s“%context。这不允许Django模板样式属性解析。

答案 1 :(得分:0)

从Django文档“要翻译模板表达式 - 比如访问对象属性或使用模板过滤器 - 您需要将表达式绑定到局部变量以便在翻译块中使用”

在不深入研究模板代码的情况下,我猜测翻译操作是在渲染模板时django所做的getattr /自动调用之前执行的。