【问题标题】:Django: how do I include a url link in a form labelDjango:如何在表单标签中包含 url 链接
【发布时间】:2011-09-23 08:11:29
【问题描述】:

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

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

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

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 中的一种 url 模式的名称

但我得到一个错误:

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

我的 urlconf 在整个站点上都可以正常工作,所以我认为问题是在呈现表单时 urlconf 尚未填充?

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

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

【问题讨论】:

  • 猜猜:reverse 有一个current_app kwarg,也许它需要一个小方向来加载urls.py
  • 报错信息来源于:raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name) 表示他知道?

标签: django forms url reverse


【解决方案1】:

lazy_reverse 不起作用,因为您在使用 "...%s..." % lazy(blah) 符号后第二次转身并解开它。

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

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

但我没有测试这个

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

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

【讨论】:

  • Klaas,我尝试了很多关于你建议的语法,但它打印出类似:“at 0xa6b917c>”。所以目前我把它放在 init 中,它可以正常工作。
【解决方案2】:

您可以像这样提供一个表单标签的链接:

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()?

【讨论】:

    【解决方案3】:

    我使用这种语法

    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'))))
    

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 2016-07-19
      • 1970-01-01
      • 2011-07-17
      • 2012-08-20
      • 2017-04-06
      • 1970-01-01
      • 2018-08-05
      • 2013-06-05
      相关资源
      最近更新 更多