Django:如何在表单标签中包含url链接

时间:2011-06-27 08:42:12

标签: django forms url reverse

我的用例看起来很基本,但我在网上找不到任何东西!

这个想法是一个带有复选框的表格“我已阅读并同意条款和条件” 以及“条款和条件”的链接,指向包含此类条款和条件的页面...... 经典!

所以我的表格中有一个字段如下:

tos = forms.BooleanField(widget=forms.CheckboxInput(),
                         label=_(u'I have read and agree to the <a href="%s" target="_blank">terms and conditions</a>' % reverse('terms_of_use')),
                         initial=False)

其中'使用条款'是urls.py

中我的某个网址模式的名称

但是我收到了一个错误:

ImproperlyConfigured: The included urlconf urls doesn't have any patterns in it

我的urlconf在整个网站上工作正常,所以我认为问题是在呈现表单时还没有填充urlconf?

我尝试使用lazy_reverse = lazy(reverse,str)而不是反向,但它没有解决任何问题。

有没有办法让这项工作?用例似乎非常基本,所以肯定有一种方法可以做到这一点,而不必分解我的模板中的表单?!

3 个答案:

答案 0 :(得分:3)

lazy_reverse将无法正常工作,因为您使用"...%s..." % lazy(blah)表示法后转换并在第二个时间内取消它。

我想你可以尝试懒惰整个事情,即

label = lazy(lambda: _("bla %s bla" % reverse('something')))

但我没有测试这个

或者,只需覆盖__init__处的标签,即

self.fields['myfield'].label = 'blah %s bla' % reverse('bla')

答案 1 :(得分:1)

您可以提供如下表单标签的链接:

foo_filter=forms.ModelChoiceField(FooFilter.objects.all(),
               label=format_html('<a href="{}">{}</a>', reverse_lazy('foo-filter'), 
                                 FooFilter._meta.verbose_name))

请参阅AppRegistryNotReady: lazy format_html()?

答案 2 :(得分:1)

我使用这种语法

from django.urls import reverse
from django.utils.functional import lazy

privacy = forms.BooleanField(label = lazy(lambda: _("Privacy <a href='%s' a>policy</a>" % reverse('privacy'))))