python gettext错误:无法隐式地将'__proxy__'对象转换为str

Esc*_*her 9 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"
    )
Run Code Online (Sandbox Code Playgroud)

这现在给出了TypeError最后一行的第二行:

Can't convert '__proxy__' object to str implicitly
Run Code Online (Sandbox Code Playgroud)

为什么?我该如何解决?

编辑:

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

Esc*_*her 7

__proxy__是翻译字符串,其实际翻译结果只有在字符串中使用该对象后才能确定(即,当您使用此处ugettext_lazy而不是ugettext此处时会发生什么)。

文献资料