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