2011-05-13 23 views
3

我的代碼包含:模板標籤的形式的錯誤消息中

Class GroupForm(forms.ModelForm): 
    .... 
    def clean_name(self): 
     .... 
     raise forms.ValidationError(mark_safe('....<a href="{% url edit %}">click here</a>.')) 

我想包括一個鏈接,我需要kwargs傳遞給我的錯誤信息。我正在使用mark_safe,以便我的錨文本字符不會被轉義。

當前在頁面上產生的url是(當前url目錄)/ {%url edit%}。它只是將我的標籤視爲文本。

有沒有一種方法可以讓這個url標籤像正常一樣行事?

回答

0

從技術上講,但它是一個有點複雜。 ValidationError期望純文本,所以你將不得不以這種或那種方式給它。但是你可以將其送入ValidationError之前自己呈現文本:

Class GroupForm(forms.ModelForm): 
    .... 
    def clean_name(self): 
     from django.template import Context, Template 
     t = Template('....<a href="{% url edit %}">click here</a>.') 
     c = Context() 
     raise forms.ValidationError(t.render(c)) 

Template.render()需要一個背景,這就是爲什麼我只是一個空過去了。但是如果你有其他變量,而且你也需要渲染,你可以通過字典的形式將它們傳遞到Context

UPDATE:丹尼爾·羅斯曼提到,這是不必要的,因爲網址,你可以只使用reverse,但如果你需要渲染任何其他類型的標籤,這是你所需要的方法。

+0

謝謝,這個工作,現在知道該怎麼做任何標記! – Brian 2011-05-13 20:14:17

0

你可以做到這一點,但沒有必要。在Python代碼的{% url %}標籤的等效代碼是django.core.urlresolvers.reverse

from django.core.urlresolvers import reverse 

... 

    url = reverse("edit") 
    raise forms.ValidationError(mark_safe('....<a href="%s">click here</a>.' % url)) 
+0

哈哈。對。在我意識到這是一個他想要處理的URL之前,我已經半路回答了他的問題,即使這樣,他們也沒有停下來思考'reverse'。好吧。 ;) – 2011-05-13 19:12:51