我想在django model_field的help_text
属性中添加条款和条件的链接,基本上我想写代码如下:
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"))
)
显然失败了,因为在实例化模型时urlconf没有准备好。
我甚至尝试将help_test
包裹在SimpleLazyObject
中,但它仍然无效。
我宁愿不碰模板代码。如果没有在字符串或设置中硬编码url,有没有办法实现这一点?
答案 0 :(得分:6)
我认为这是django.core.urlresolvers.reverse_lazy
的意思
有关信息:它已在1.4中添加到django,因此如果您使用的是早期版本,则需要升级。
正如评论中提到的那样,你仍然需要绕过字符串格式来打破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>"',
)
答案 1 :(得分:1)
自Django
2.1 django.utils.translation.string_concat()
has been removed起,在较早的版本中被标记为已弃用。
为了以类似语法的str.format()
评估惰性对象,现在必须改为使用format_lazy()
。
示例:
my_field = forms.BooleanField(
# ...
help_text=format_lazy(
'''
Please click <a href='{}'>here</a>.
''',
reverse_lazy('my-viewname')
)
)
请注意,出于HTML输出的目的,您可能必须将help_text
内容明确标记为安全。模板和safe filter的帮助下,可能的解决方案是:
{{ my_field|safe }}