Обратный URL в модели Django help_text
Я хочу добавить ссылку на условия в help_text
свойство django model_field, в основном я хотел бы написать код, например:
class UserRegisterData(models.Model):
accepted_terms = models.BooleanField(
...
help_text = u""Terms and conditions are avilable on <a href="{reg}">this iste</a> stronie""".format(reg = reverse("terms"))
)
Очевидно, что это не помогает, потому что urlconfs не подготовлены, пока модели создаются.
Я даже пытался завернуть help_test
в SimpleLazyObject
но это все еще не сработало.
Я бы предпочел не трогать код шаблона. Есть ли способ добиться этого без жесткого URL-адреса в строке или настройках?
1 ответ
Я думаю это то что django.core.urlresolvers.reverse_lazy
предназначен для.
Для информации: он был добавлен в django в 1.4, поэтому, если вы используете более раннюю версию, вам нужно будет обновить ее.
Как упомянуто в комментариях, вам все равно нужно обойти форматирование строк, которое устраняет "лень" обратного URL:
from django.utils.translation import string_concat
# ...
help_text = string_concat( # Happens to be lazy!
u'Terms and conditions are available on <a href="',
reverse_lazy("terms"),
u'">this site</a>"',
)
По состоянию на Django
2,1 django.utils.translation.string_concat()
был удален и помечен как устаревший в более ранних версиях.
Чтобы оценить ленивые объекты в str.format()
как синтаксис теперь вы должны использовать format_lazy()
вместо.
Пример:
my_field = forms.BooleanField(
# ...
help_text=format_lazy(
'''
Please click <a href='{}'>here</a>.
''',
reverse_lazy('my-viewname')
)
)
Обратите внимание, что вам, возможно, придется явно пометить help_text
контент как безопасный для целей вывода HTML. Возможное решение для этого может быть в шаблоне и с помощью безопасного фильтра:
{{ my_field|safe }}