在django模型help_text中反转url

时间:2013-01-02 19:16:01

标签: django models urlconf

我想在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,有没有办法实现这一点?

2 个答案:

答案 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 }}