在django模型help_text中反转url

问题描述 投票:0回答:2

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

django models urlconf
2个回答
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')
        )
)

请注意,您可能必须将help_text内容明确标记为HTML输出安全。这样做的可能解决方案可以在模板和safe filter的帮助下:

{{ my_field|safe }}

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>"',
)
© www.soinside.com 2019 - 2024. All rights reserved.