【问题标题】:python gettext error: Can't convert '__proxy__' object to str implicitlypython gettext错误:无法将'__proxy__'对象隐式转换为str
【发布时间】:2016-05-24 09:52:23
【问题描述】:

我突然在之前运行的代码中遇到了一个奇怪的错误。我最近从 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 上运行良好。这是一个错误吗?

【问题讨论】:

    标签: python django gettext


    【解决方案1】:

    __proxy__ 是翻译字符串,其实际翻译结果直到对象被用于字符串时才会确定(即,当您在此处使用 ugettext_lazy 而不是 ugettext 时会发生什么)。

    Documentation

    【讨论】:

      【解决方案2】:

      根据给定的Documentation link

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

      【讨论】:

        猜你喜欢
        • 2017-12-21
        • 2018-12-26
        • 2019-04-11
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 2015-11-14
        相关资源
        最近更新 更多