我的用例看起来很基本,但我在网上找不到任何东西!
这个想法是一个带有复选框的表格“我已阅读并同意条款和条件” 以及“条款和条件”的链接,指向包含此类条款和条件的页面...... 经典!
所以我的表格中有一个字段如下:
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)而不是反向,但它没有解决任何问题。
有没有办法让这项工作?用例似乎非常基本,所以肯定有一种方法可以做到这一点,而不必分解我的模板中的表单?!
答案 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))
答案 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'))))