为什么pgettext_lazy会破坏我的模板,但ugettext_lazy却没有?

Jus*_* H. 4 django translation internationalization lazy-evaluation

当我在模型的help_text上使用pgettext_lazy时,我的模板失败了.它与ugettext_lazy一起工作正常.

错误

Caught TypeError while rendering: Lazy object returned unexpected type.
Run Code Online (Sandbox Code Playgroud)

模型

class BalanceIncreaseOrder(models.Model):
    amount = models.FloatField(help_text=pgettext_lazy("Translators: please localize this to reflect the correct currency", "Note: amount will be billed in United States dollars (USD)"))
Run Code Online (Sandbox Code Playgroud)

形成

class BalanceIncreaseOrderForm(ModelFormRequired):
    class Meta:
        model = BalanceIncreaseOrder
        fields = ("amount",)
Run Code Online (Sandbox Code Playgroud)

模板

{% for field in form %}
    {{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我在每次设置帮助文本后调试了模型.两次打印出来

<django.utils.functional.__proxy__ object at 0x10fcb3a50>
Run Code Online (Sandbox Code Playgroud)

pgettext_lazy中有错误吗?有任何想法吗?

San*_*wen 5

我有同样的问题.我用了

unicode(pgettext_lazy('context', 'string'))
Run Code Online (Sandbox Code Playgroud)

这将消除错误,但现在manage.py makemessages不接受翻译的行.

也许这会对你有帮助..

编辑:

啊,我找到了解决方案:

pgettext_lazy(u'context', u'string')
Run Code Online (Sandbox Code Playgroud)

这将完成这项工作.