2010-01-09 37 views
21

Tôi đang cố gắng tạo biểu mẫu ở Django. Điều đó làm việc và tất cả, nhưng tôi muốn tất cả các lỗi được ở trên cùng của biểu mẫu, không phải bên cạnh mỗi trường có lỗi. Tôi đã thử looping trên form.errors, nhưng nó chỉ cho thấy tên của trường có lỗi, không phải là một thông báo lỗi như "Tên được yêu cầu."Lấy danh sách lỗi ở dạng Django

này là khá nhiều những gì tôi muốn để có thể sử dụng ở phía trên có dạng:

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

Tôi sẽ sử dụng gì cho ??? đó? Nó không phải là errors; chỉ xuất ra tên của các trường.

Trả lời

43

form.errors là từ điển. Khi bạn làm lỗi {% for error in form.errors %} tương ứng với khóa.

Thay vì cố gắng

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

vv

+0

Khi thực hiện điều này, nó xuất ra một danh sách có bốn mục, mỗi mục chứa một ký tự: "s", "a", "a" và "m". Các hình thức cụ thể tôi đang sử dụng là hình thức đăng ký trong django-đăng ký. – icktoofay

+0

Sau khi gỡ lỗi này một chút, "s", "a", "a" và "m" là chữ cái thứ hai của tên của các trường. Đó là hơi kỳ lạ, nhưng tôi sẽ đánh dấu câu trả lời của bạn là câu trả lời, vì tôi nghĩ rằng tôi sẽ có thể hình dung ra từ đây. – icktoofay

+6

Có lẽ chỉ cần gọi .items() trên từ điển, trả về một chuỗi các giá trị (khóa, giá trị) sẽ giải nén vào (trường, lỗi) của bạn. –

2

Nếu bạn muốn một cái gì đó đơn giản với một tình trạng mất theo cách này:

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

Nếu bạn muốn biết thêm và thấy tên và lỗi của trường, hãy thực hiện việc này:

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

Nếu bạn muốn understant form.errors là một từ điển lớn.

Các vấn đề liên quan