当我使用{{f.as_p}}显示有错误的表单时,错误列表ul总是首先出现在标签和输入字段中。例如:
<ul class="errorlist">
<li>This field is required.</li>
</ul>
<p>
<label for="id_content">Content:</label>
<textarea id="id_content" class="required error" name="content" cols="80" rows="10"/>
</p>
我知道你可以使用
{% for field in f %}
<p>{{ field.label_tag }}: {{ field }}</p>
{{ field.errors }}
{% endfor %}
要更改标签和字段后的错误列表ul位置,但我想直接使用f.as_p,f.as_table或{{f}},因为它简单易行,特别是当我必须显示很多表单时。
所以问题是:默认情况下,有没有办法让字段部分显示错误列表?
答案 0 :(得分:7)
我总是使用的循环,这是相当通用的,但非常可定制的是:
{% for field in form %}
<tr>
<td>{{ field.label_tag }}:</td>
<td>
{{ field.errors }}
{{ field }}
{% if field.help_text %}
<img class="tooltip" title="{{ field.help_text }}" src="{{ MEDIA_URL }}images/icon_help.png">
{% endif %}
</td>
</tr>
{% endfor %}
表格标签之间的c:)
答案 1 :(得分:3)
另一种可以大大简化这项工作的方法是对Form(和ModelForm)进行子类化,以便实现一个新方法来通过html模板呈现输出。如何执行此操作的描述为here。
答案 2 :(得分:1)
Form.as_p()只是Form类中的一个方法。只需创建一个继承自Form的新类,然后复制粘贴as_p方法并根据自己的喜好进行更改。然后,只要你从表单类继承而不是Django的新表单继承。
答案 3 :(得分:0)
我使用jquery appendTo在django fields元素之后移动所有errorlist ul元素。它不需要任何工作来渲染html,而是通过jquery调整django默认html来修复你的需要。
$(document).ready(function() {
$("ul.errorlist").each(function(index){
$(this).appendTo($(this).parent());
});
});