Dan*_*Dan 52 django django-forms
我的Django表单中的错误是根据文档在UL中呈现的...
Django的
{{ form.non_field_errors }}
Run Code Online (Sandbox Code Playgroud)
HTML
<ul class="errorlist">
<li>Sender is required.</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
如何呈现错误,使它们不在UL中,而在每个字段相关错误的段落标记中?理想情况......
<ul>
<li>
<label>...</label>
<input>...</input>
<p>Error message...</p>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
编辑:
为了清楚起见,我应该在我的示例中使用此代码...
{{ form.fieldname.errors }}
Run Code Online (Sandbox Code Playgroud)
Thi*_*Lam 96
您可以在模板中显示以下错误:
<p>{{ form.fieldname.errors.as_text }}</p>
Run Code Online (Sandbox Code Playgroud)
Chr*_*att 14
它显然无法在字段的上下文中呈现,因为这些是属性名称暗示的"非字段错误".解决此问题的唯一方法是在验证时在正确的位置添加错误.例如,执行以下操作会导致非字段错误:
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')
Run Code Online (Sandbox Code Playgroud)
但是,您可以执行以下操作以使该错误仍显示在右侧字段中:
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')
Run Code Online (Sandbox Code Playgroud)
更新:
来自Django 文档:
可以使用{{form.name_of_field}}将每个命名的表单字段输出到模板,这将生成显示表单窗口小部件所需的HTML.使用{{form.name_of_field.errors}}显示表单错误列表,呈现为无序列表.这可能看起来像:
<ul class="errorlist">
<li>Sender is required.</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
该列表有一个CSS类的错误列表,允许您设置其外观样式.如果您希望进一步自定义错误显示,可以通过循环显示它们(强调我的):
{% if form.subject.errors %}
<ol>
{% for error in form.subject.errors %}
<li><strong>{{ error|escape }}</strong></li>
{% endfor %}
</ol>
{% endif %}
Run Code Online (Sandbox Code Playgroud)