2011-06-27 52 views
4

我的用例看起來非常基本,但在網上找不到任何東西!Django:如何在表單標籤中包含url鏈接

這個想法是一個帶有複選框「我已閱讀並同意條款和條件」的表單 「條款和條件」的鏈接指向包含此類條款和條件的頁面... 經典!

所以我有一個外地在我的形式如下:

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)而不是rev​​erse,但它不能解決任何問題。

有沒有辦法讓這項工作?這個用例看起來非常非常基本,所以肯定有辦法做到這一點,而不必分解我的模板內的形式?!

+0

猜測:'reverse'有一個'current_app' kwarg,也許它需要一個'urls.py'加載的方向。 – Bjorn

+0

錯誤消息追蹤來自:raise improperlyconfigured(「包含的urlconf%s中沒有任何模式」%self.urlconf_name)這表明他知道? – sampac

回答

3

lazy_reverse將無法正常工作,因爲您正在轉向,並且在第二秒之後使用"...%s..." % lazy(blah)表示法解開它。

我想你可以嘗試懶整個事情,即

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

,但我沒有或者測試這個

,只是重寫標籤在__init__,即

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

Klaas,我在你提出的建議中嘗試了很多語法,但是它打印的內容如下:「at 0xa6b917c>」。所以目前我已經把它放在__init__中,它工作正常。 – sampac

0

您可以提供一個鏈接,如下所示:

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

相關問題