python gettext error: Can't convert '__proxy__' object to str implicitly
python gettext error: Can't convert '__proxy__' object to str implicitly
我突然在以前工作的代码中遇到了一个奇怪的错误。我最近从 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
为什么?我该如何解决这个问题?
编辑:
这可以通过在 str()
中包装对 ugettext_lazy()
的第二次调用来解决(即代码变为 str( _('link!') )
。这样做可以使视图呈现良好。因此我的问题是现在:为什么?整个复合字符串已经包裹在 str()
中,正如我所说,这段代码在以前版本的 django 上运行良好。这是一个错误吗?
__proxy__
是翻译字符串,其实际翻译结果只有在字符串中使用该对象后才能确定(即,当您在此处使用 ugettext_lazy
而不是 ugettext
时会发生什么) .
根据给出的Documentation link:
Calling str() with the lazy translation as the argument will generate a string in the current locale.
我突然在以前工作的代码中遇到了一个奇怪的错误。我最近从 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
为什么?我该如何解决这个问题?
编辑:
这可以通过在 str()
中包装对 ugettext_lazy()
的第二次调用来解决(即代码变为 str( _('link!') )
。这样做可以使视图呈现良好。因此我的问题是现在:为什么?整个复合字符串已经包裹在 str()
中,正如我所说,这段代码在以前版本的 django 上运行良好。这是一个错误吗?
__proxy__
是翻译字符串,其实际翻译结果只有在字符串中使用该对象后才能确定(即,当您在此处使用 ugettext_lazy
而不是 ugettext
时会发生什么) .
根据给出的Documentation link:
Calling str() with the lazy translation as the argument will generate a string in the current locale.