2010-01-09 19 views
21

Django'da bir form oluşturmaya çalışıyorum. Bu işe yarıyor, ama hataların her birinin yanında değil, tüm hataların formun en üstünde olmasını istiyorum. Form.errors üzerinde döngü denedim, ancak yalnızca "Name is required" gibi bir hata iletisi değil, bir hata olan alanın adını gösterdi.Django formundaki hataların bir listesini alma

Bu hemen hemen ben formun üstündeki kullanabilmek istiyorum budur:

orada ??? için kullanmak hangi
{% if form.??? %} 
    <ul class="errorlist"> 
    {% for error in form.??? %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

? errors değil; Bu sadece alanların isimlerini çıkarır.

cevap

43

form.errors bir sözlüktür. Ne zaman {% for error in form.errors %} hata yapmak için karşılık gelir.

{% if form.errors %} 
    <ul> 
    {% for error in form.errors %} 
     <li>{{ error }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

Eğer fazla bilgi istiyorsanız ve adını ve hata bakın: Bir koşulu ile basit bir şey bu şekilde almak istiyorsanız

yerine

{% for field, errors in form.errors.items %} 
    {% for error in errors %} 
... 

Vb

+0

Bunu yaparken, her biri bir karakter içeren dört öğe içeren bir liste çıkarır: "s", "a", "a" ve "m". Kullandığım özel form django-kayıttaki kayıt formudur. – icktoofay

+0

Bu hata ayıklandıktan sonra "s", "a", "a" ve "m" alanların adının ikinci harfidir. Bu biraz garip, ama cevabını cevabın olarak işaretleyeceğim, çünkü buradan anlayabileceğimi düşünüyorum. – icktoofay

+6

Muhtemelen sözlükteki .items() öğesini çağırmanız yeterlidir, bu da (alan, hatalar) 'a açılacak bir dizi (anahtar, değer) döndürür. –

2

deneyin alanın bunu yapın:

{% if form.errors %} 
    <ul> 
    {% for key,value in form.errors.items %} 
     <li>{{ key|escape }} : {{ value|escape }}</li> 
    {% endfor %} 
    </ul> 
{% endif %} 

form.errors'un altından anlamak istiyorsanız büyük bir sözlüktür.

İlgili konular