8

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

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

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

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

4

3 回答 3

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

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

有关它的更多信息,请访问 django 项目网站

于 2013-03-17T16:49:14.587 回答
0

好吧,默认情况下,Django 表单使用ErrorList作为error_class证明链接)。如您所见,它的as_text方法格式通过在值前面加上星号来列出。

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

于 2014-09-03T10:48:32.130 回答
0

迭代form.non_field_errors并不总是最好的方法,例如,在我的情况下,我想使用Django Widget Tweaks在相关字段旁边显示此屏幕截图中的工具提示。

项目/应用程序/模板/模板.html

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

我没有乱用模板代码来一次性传递 HTMLtitle属性,而是按照@oblalex的提示编写了我自己的修改ErrorList,并使用了一个as_text不带星号的方法。

项目/应用程序/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作为您的or或类似的error_class参数传递给我的一些表单集:FormModelFormModelForm

项目/应用程序/views.py

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)

现在工具提示看起来像这样,没有星号。

error_class而不是每次在视图中实例化表单时都传递,您可以将此单线添加到您的表单类中(请参阅@Daniel的此答案):

项目/应用程序/forms.py

from django import forms
from .utils import MyErrorList

class InputForm(forms.ModelForm):

    def __init__(self, *args, row, **kwargs):
        super(InputForm, self).__init__(*args, **kwargs)
        self.error_class = MyErrorList
于 2019-07-19T16:33:05.977 回答