【问题标题】:Django form errorlist render positionDjango 表单错误列表渲染位置
【发布时间】:2010-11-16 04:10:24
【问题描述】:

当我使用 {{ 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 %}

改变标签和字段后的errorlist ul位置,但我想直接使用f.as_p,f.as_table或{{ f }},因为它简单易行,尤其是当我必须显示很多表格时。

那么问题来了:有没有办法让errorlist ul默认显示在字段部分之后?

【问题讨论】:

  • 在表单对象中定义这个会很好,但我不认为有这样的选项。

标签: django forms


【解决方案1】:

我经常使用的循环是这样的,它相当通用但非常可定制:

{% 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 的表格标签之间 :)

【讨论】:

    【解决方案2】:

    另一种可以大大简化这项工作的方法是将 Form(和 ModelForm)子类化,从而实现一种新方法来通过 html 模板呈现输出。如何做到这一点描述here

    【讨论】:

    • 这个答案救了我的命。对于最新版本的 Django,您应该使用this for passing a context。另请注意,{{ field.errors }} 将错误呈现为ul。遍历错误以获取每个单独的错误。
    【解决方案3】:

    Form.as_p() 只是 Form 类中的一个方法。只需创建一个继承自 Form 的新类并复制粘贴 as_p 方法并将其更改为您喜欢的。然后,无论何时您创建一个新表单都从您的表单类而不是 Django 继承。

    【讨论】:

      【解决方案4】:

      我使用 jquery appendTo 将所有 errorlist ul 元素移动到 django fields 元素之后。它不需要任何工作来呈现 html,而是通过 jquery 调整 django 默认 html 来解决您的需求。

      $(document).ready(function() {
          $("ul.errorlist").each(function(index){
              $(this).appendTo($(this).parent());
          });
      });
      

      【讨论】:

      • 你怎么输出表格,我的错误列表被拉到表格底部,不好。
      猜你喜欢
      • 2015-05-16
      • 1970-01-01
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2018-12-22
      • 2015-12-30
      • 1970-01-01
      相关资源
      最近更新 更多