1

我想在help_textdjango 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"))
     )

whis 显然失败了,因为在实例化模型时 urlconfs 没有准备好。

我什至试图包裹help_testSimpleLazyObject但它仍然没有工作。

我宁愿不碰模板代码。有没有办法在字符串或设置中不硬编码 url 来实现这一点?

4

2 回答 2

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>"',
)
于 2013-01-02T19:21:38.260 回答
2

Django2.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 }}
于 2019-02-18T07:31:54.147 回答