it-swarm.cn

如何在UL中呈现Django表单错误?

我的Django表单中的错误是根据 docs ...在UL中呈现的。

Django的

{{ form.non_field_errors }}

HTML

<ul class="errorlist">
  <li>Sender is required.</li>
</ul>

如何呈现错误,使它们不出现在UL中,而是出现在每个字段相关错误的段落标记中?理想情况......

<ul>
  <li>
    <label>...</label>
    <input>...</input>
    <p>Error message...</p>
  </li>
</ul>

编辑: /

为了清楚起见,我应该在我的示例中使用此代码...

{{ form.fieldname.errors }}
50
Dan

您可以在模板中显示以下错误:

<p>{{ form.fieldname.errors.as_text }}</p>
96
Thierry Lam

它显然无法在字段的上下文中呈现,因为这些是属性名称暗示的“非字段错误”。解决此问题的唯一方法是在验证时在正确的位置添加错误。例如,执行以下操作会导致非字段错误:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        somefield = self.cleaned_data.get('somefield')
        if not somefield:
            raise forms.ValidationError('Some field is blank')

但是,您可以执行以下操作以使该错误仍显示在右侧字段中:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        somefield = self.cleaned_data.get('somefield')
        if not somefield:
            if not self._errors.has_key('somefield'):
                from Django.forms.util import ErrorList
                self._errors['somefield'] = ErrorList()
            self._errors['somefield'].append('Some field is blank')

更新: /

来自Django docs

可以使用{{form.name_of_field}}将每个命名的表单字段输出到模板,这将生成显示表单窗口小部件所需的HTML。使用{{form.name_of_field.errors}}显示表单错误列表,呈现为无序列表。这可能看起来像:

<ul class="errorlist">
    <li>Sender is required.</li>
</ul>

该列表有一个CSS类的错误列表,允许您设置其外观样式。 如果您希望进一步自定义错误的显示,可以通过循环显示它们(强调我的)

{% if form.subject.errors %}
    <ol>
    {% for error in form.subject.errors %}
        <li><strong>{{ error|escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}
13
Chris Pratt