如何在模板中格式化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}}都显示为无序列表,我不想要无序列表。
答案 0 :(得分:17)
{% for error in form.non_field_errors %}
{{error}}
{% endfor %}
当您将错误列表作为文本调用时,它会尝试将其显示为列表。只需循环遍历列表即可自行获取错误,以便您可以应用自己的样式。
有关django项目website
的更多信息答案 1 :(得分:0)
嗯,默认情况下,Django表单使用ErrorList作为error_class
(proof 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_class
或Form
的{{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