在Django中使用表单错误消息中的模板标记

时间:2011-05-13 18:34:02

标签: django django-forms django-templates

我的代码包含:

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

我想在我的错误消息中包含一个我需要传递kwargs的网址。我正在使用mark_safe,以便我的锚文本字符不会被转义。

目前,页面上生成的网址是(当前网址目录)/ {%网址编辑%}。它只是将我的标签视为文本。

有没有办法让这个url标签表现得像正常一样?

2 个答案:

答案 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))