我正在使用django i18n来支持i18n。我发现在django blocktrans一个对象,dict直接不起作用。
例如,如果我有一个名为obj的对象,我尝试使用它像
{% blocktrans %} My name is {{ obj.name }} {% endblocktrans %}
不起作用,但如果我像
一样使用它{% blocktrans with name=obj.name %} My name is {{ name }} {% endblocktrans %}
会奏效。
我只是想知道为什么第一个例子没有用,但第二个有效。
答案 0 :(得分:2)
Django的blocktrans
被传递给ugettext,它将它们标记为u“我的名字是%(名称)s”形式的翻译字符串,在运行时将其作为映射处理,即“u”我的名字是%(name)s“%context。这不允许Django模板样式属性解析。
答案 1 :(得分:0)
从Django文档“要翻译模板表达式 - 比如访问对象属性或使用模板过滤器 - 您需要将表达式绑定到局部变量以便在翻译块中使用”
在不深入研究模板代码的情况下,我猜测翻译操作是在渲染模板时django所做的getattr /自动调用之前执行的。