gpt4 book ai didi

Django 将表单错误输出为 {{ form.as_table }} 中的表行

转载 作者:行者123 更新时间:2023-12-02 09:05:50 24 4
gpt4 key购买 nike

我确实发现诸如 as_table 之类的表单输出快捷方式非常方便。然而,在使用这些方法时显示错误对我来说似乎有点违反直觉。当我使用 as_table 格式时,我希望根据表格式显示特定于字段的错误。我可以像这样手动将表单拼凑在一起:

<table>
{% for error in form.non_field_errors %}
<tr><td>{{ error }}</td></tr>
{% endfor %}
{% endif %}

{% if form.username.errors %}
{% for error in form.username.errors %}
<tr><td>{{ error }}</td></tr>
{% endfor %}
{% endif %}
<tr><th><label for="id_username">Name:</label></th><td>{{ form.username }}</td></td>

{% if form.password.errors %}
{% for error in form.password.errors %}
<tr><td>{{ error }}</td></tr>
{% endfor %}
{% endif %}
<tr><th><label for="id_password">Password:</label>/th><td>{{ form.password }}</td></td>

但是我想知道是否有更简单的方法来做到这一点?也许我在文档中错过了一些东西?或者你们可能采用不同的方法?

最佳答案

How errors are displayedcustomizing the error list format显示默认错误字段输出是什么以及如何自定义它。

我一直在使用reusable template最近在我的项目中,这对我来说效果很好。

table_form.html:

<table>
{% for error in form.non_field_errors %}
<tr><td>{{ error }}</td></tr>
{% endfor %}

{% for field in form %}
{% for error in form.username.errors %}
<tr><td>{{ error }}</td></tr>
{% endfor %}
<tr><th>{{ field.label_tag }}:</th><td>{{ field }}</td></td>
{% endfor %}
</table>

模板.html:

<form>
{% include 'table_form.html' %}
</form>

多种形式也可以使用,例如包含 form1 和 form2 的上下文 View :

模板.html:

<form>
{% include 'table_form.html with form=form1 %}
</form>

<form>
{% include 'table_form.html with form=form2 %}
</form>

编辑:

这是as_table BaseForm 类中定义的方法:

210     def as_table(self):
211 "Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
212 return self._html_output(
213 normal_row = u'<tr%(html_class_attr)s><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>',
214 error_row = u'<tr><td colspan="2">%s</td></tr>',
215 row_ender = u'</td></tr>',
216 help_text_html = u'<br /><span class="helptext">%s</span>',
217 errors_on_separate_row = False)

在表单中覆盖此方法将允许您在使用 {{ form.as_table }} 时更改呈现

关于Django 将表单错误输出为 {{ form.as_table }} 中的表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com