python gettext错误:无法转换' __代理__'隐含地反对str

时间:2016-05-24 09:52:23

标签: python django gettext

我突然在以前工作的代码中遇到了一个奇怪的错误。我最近从1.9.4升级到Django 1.9.6。

在我的一个观点中,我有:

from django.contrib import messages
from django.utils.translation import ugettext_lazy as _

messages.success(request, str( _('A string with a ') +
    '<a target="_blank" href="/preview/' + mymodel.hash + '">' +
    _('link!') + '</a>.'), extra_tags="safehtml"
    )

现在在最后一行显示TypeError

Can't convert '__proxy__' object to str implicitly

为什么呢?我该如何解决这个问题?

编辑:

这可以通过将ugettext_lazy()中的第二个调用包装到str()来修复(即代码变为str( _('link!') )。这样做可以使视图呈现正常。我的问题现在是:为什么?整个复合字符串已经包含在str()中,正如我所说,这段代码在以前版本的django中运行良好。这是一个错误吗?

2 个答案:

答案 0 :(得分:5)

__proxy__是翻译字符串,在字符串中使用对象之前不会确定其实际翻译结果(即在此处使用ugettext_lazy代替ugettext时会发生什么)。

Documentation

答案 1 :(得分:1)

根据给定的Documentation link

  

以惰性翻译作为参数调用str()会在当前语言环境中生成一个字符串。