在Django模板中显示无字段错误

时间:2011-09-12 13:18:50

标签: django validation templates django-forms django-errors

我想在模板中显示我的non_field_erors。到目前为止,我可以用以下方式显示表单中的所有错误:

- > base.html文件

{% if form.errors %}
    {% for field in form %}
         {% if field.errors %}
         <div class="ui-state-error ui-corner-all notification" > 
        <p>
           <span class="ui-icon ui-icon-alert"></span>
           {{ field.label_tag }}:{{ field.errors|striptags }}
               <a class="hide" onClick="hideBar(this)">hide</a>
            </p>
        </div>  
         {% endif %}                            
    {% endfor%}
{% endif %}

{{ form.non_field_errors }}

我添加了一个只有IntegerField的新表单:

class MerchantForm(forms.ModelForm):
    price =  forms.IntegerField(widget=forms.TextInput(attrs={'class':'small'}))

    def clean_price(self):
        price = self.cleaned_data.get('price')
        if price == 120:
           raise forms.ValidationError('error blah.')
        return price

当我将价格发布为120时,我的页面中没有任何验证错误。

我的观点是:

def bid(request,product_slug):
    .
    .
    form = MerchantForm()
    context = RequestContext(request,{
                'form':form,
                                 ....
                    })

    if request.method == 'POST':
        form = MerchantForm(request.POST)
        if form.is_valid():
             return HttpResponse('ok')
  #     else:
  #          return HttpResponse(form.errors.get('__all__'))
   return render_to_response('bid.html',context_instance=context)

我可以使用注释行检索错误,但我不想在views.py中执行此操作。有任何想法吗 ?

1 个答案:

答案 0 :(得分:2)

哦,亲爱的。

首先,为什么在您发布的代码段明确显示non_field_errors中出现的错误时,为什么会询问clean_price,因此与price字段相关联?

其次,您的观看代码是颠倒的。您创建一个空表单实例,并将其添加到上下文中。然后创建另一个表单实例,绑定到POST数据,但不要将其放入上下文中。因此,模板永远不会看到绑定的形式,因此您自然不会在模板中看到任何验证错误。