ошибка 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 () с ленивым переводом в качестве аргумента будет генерировать строку в текущей локали.