4

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

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

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

行不通,但是如果我像这样使用它

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

将工作。

我只是想知道为什么第一个例子不起作用,但第二个例子起作用了。

4

2 回答 2

4

Djangoblocktrans被传递给 ugettext,后者将它们标记为 u"My name is %(name)s" 形式的翻译字符串,在运行时使用上下文作为映射进行处理,即 `u"My name is %(name)s “ % 语境。这不允许 Django 模板样式属性解析。

于 2012-07-05T07:47:41.700 回答
1

来自 Django 文档“要翻译模板表达式——例如,访问对象属性或使用模板过滤器——您需要将表达式绑定到本地变量以在翻译块中使用”

如果不深入研究模板代码,我猜想翻译操作是在 django 在渲染模板时执行的 getattr/自动调用之前执行的。

于 2012-07-05T07:44:19.453 回答