在模板中格式化django form.non_field_errors

时间:2013-03-16 16:44:18

标签: django django-templates

如何在模板中格式化django form.non_field_errors.as_text而不将它们作为无序列表或在前面附加*

{{ form.non_field_errors.as_text }}会在文字前面显示*的错误。

django ticket也有助于解释为什么*不会被移除,但这对我没有帮助。我不想要*

{{form.non_field_errors}}和{{form.non_field_errors.as_ul}}都显示为无序列表,我不想要无序列表。

3 个答案:

答案 0 :(得分:17)

{% for error in form.non_field_errors %}
    {{error}}
{% endfor %}

当您将错误列表作为文本调用时,它会尝试将其显示为列表。只需循环遍历列表即可自行获取错误,以便您可以应用自己的样式。

有关django项目website

的更多信息

答案 1 :(得分:0)

嗯,默认情况下,Django表单使用ErrorList作为error_classproof link)。正如您所看到的,它的as_text方法通过在数字前加上星号来格式化列表。

因此,您可以使用自己的error_class方法创建一些自定义as_text,并以合适的方式将其传递到您的表单。

答案 2 :(得分:0)

遍历form.non_field_errors并不总是最好的方法,例如,在我的情况下,我想使用like in this screenshot在相关字段旁边显示工具提示Django Widget Tweaks

project / app / templates / template.html

{% render_field field class="form-control is-invalid" data-toggle="tooltip" title=field.errors.as_text %}

我没有去弄乱模板代码来一次传递HTML title属性,而是跟随@oblalex的技巧,并用as_text编写了自己的修改过的ErrorList class没有星号的方法。

project / app / utils.py

from django.forms.utils import ErrorList

class MyErrorList(ErrorList):
"""
Modified version of the original Django ErrorList class.

ErrorList.as_text() does not print asterisks anymore.
"""
    def as_text(self):
        return '\n'.join(self)

现在as_text()函数已被覆盖,您可以将类MyErrorList作为error_classForm的{​​{1}}参数传递,或者像在我的设置某些ModelForm格式集:

project / app / views.py

ModelForm

And now the tooltip looks like this without the asterisk.

您不必在每次在视图中实例化表单时都传递from django.forms import formset_factory from .forms import InputForm from .utils import MyErrorList def yourView(request): InputFormSet = formset_factory(InputForm) formset = InputFormSet(error_class=MyErrorList) context = {'formset': formset} return render(request, 'template.html', context) ,而只需将此单行代码添加到表单类中(请参见@Daniel的答案):

project / app / forms.py

error_class