ошибка python gettext: не удается преобразовать объект "прокси" в str неявно

я внезапно получаю странную ошибку в коде, который ранее работал. Недавно я обновился до Django 1.9.6 с 1.9.4.

в одном из моих взглядов, у меня есть:

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 на 2 последние строки:

Can't convert '__proxy__' object to str implicitly

почему? Как это исправить?

Edit:

это можно исправить, обернув второй вызов ugettext_lazy() на str() (т. е. код становится str( _('link!') ). Это позволяет представлению отображаться нормально. Мой отсюда вопросы: Почему? Вся составная строка уже завернута в str(), и, как я уже сказал, этот код отлично работал с предыдущей версией django. Это жук?

2 ответов


__proxy__ - строка перевода, фактический результат перевода которой не определяется, пока объект не будет использоваться в строке (т. е. что происходит при использовании ugettext_lazy вместо ugettext здесь).

документация


по указанному ссылка на документацию:

вызов str () с ленивым переводом в качестве аргумента будет генерировать строку в текущей локали.