Django表单错误列表渲染位置

时间:2009-08-02 13:07:01

标签: django forms

当我使用{{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}},因为它简单易行,特别是当我必须显示很多表单时。

所以问题是:默认情况下,有没有办法让字段部分显示错误列表?

4 个答案:

答案 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());
    });
});