Python 为什么在i18n blocktrans(django)中一个对象、dict或list不';不行?

Python 为什么在i18n blocktrans(django)中一个对象、dict或list不';不行?,python,django,internationalization,django-templates,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 %} 会有用的

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

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

{% blocktrans %} My name is {{ obj.name }} {% endblocktrans %}
不起作用,但如果我像这样使用它

{% blocktrans with name=obj.name %} My name is {{ name }} {% endblocktrans %}
会有用的


我只是想知道为什么第一个示例不起作用,而第二个却起作用。

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


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

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

您所说的是正确的,但当它可以处理对象或dict对象时,为什么它不接受object.name。访问dict的object或key的属性有什么问题。@paritossingh:Python内置了
“some string%(var)s”%dict(var=“yadda”)
格式,它不是Django功能,这种格式不支持Django样式的属性解析,也不支持任何其他任意的查找规则。请理解,这超出了django的范围——这是Python(和gettext)的工作方式。