我的代码包含:
Class GroupForm(forms.ModelForm):
....
def clean_name(self):
....
raise forms.ValidationError(mark_safe('....<a href="{% url edit %}">click here</a>.'))
我想在我的错误消息中包含一个我需要传递kwargs的网址。我正在使用mark_safe,以便我的锚文本字符不会被转义。
目前,页面上生成的网址是(当前网址目录)/ {%网址编辑%}。它只是将我的标签视为文本。
有没有办法让这个url标签表现得像正常一样?
答案 0 :(得分: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
。
更新:正如Daniel Roseman所提到的,这对于URL来说是不必要的,因为你可以使用reverse
,但如果你需要渲染任何其他类型的标记,这就是你的方法需要。
答案 1 :(得分: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))