2012-05-15 45 views
11

Tôi có một dự án Django, trên một trang, có nhiều biểu mẫu (trong các thẻ khác nhau) có thể được gửi để có các hiệu ứng khác nhau. Trong mọi trường hợp, tôi muốn người dùng được chuyển hướng trở lại cùng một trang, vì vậy tôi sử dụng trong quan điểm của tôi mẫu gửi biểu mẫu và sau đó chuyển hướng đến trang gốc. Trong ít nhất một trường hợp, sự khác biệt duy nhất giữa hai biểu mẫu là giá trị của nút gửi.Làm cách nào để truy cập vào giá trị nút gửi biểu mẫu ở Django?

Theo quan điểm của tôi, tôi có mã (đó là lần đầu tiên chức năng quan điểm của tôi truy cập vào request.POST):

if request.POST['submit']=='Add': 
    #code to deal with the "Add" form 

và trong các mẫu, hình thức đầu tiên có một nút gửi như

<input type="submit" value="Add"> 

tôi nghĩ điều này sẽ làm việc, nhưng khi tôi gửi hình thức đó, tôi nhận được một lỗi tại dòng theo quan điểm từ trên cao:

chính 'submit' không tìm thấy trong <QueryDict: {u'clientyear': [u'2012'], u'csrfmiddlewaretoken': [u'be1f2f051f09f6ab0375fdf76cf6a4d7'], u'ben': [u'123405']}>

Rõ ràng, điều này không có một 'submit' phím hoặc phím bất kỳ với giá trị tương ứng với nút gửi tôi nhấp. Vì vậy, vì điều này không hoạt động, làm thế nào có thể truy cập vào giá trị của nút gửi hoặc cho biết biểu mẫu nào đã được gửi?

Trả lời

22

Submit là một cấu trúc Form HTML ... Bạn phải sử dụng tên thuộc tính của các đối tượng hình thức như sau ... Trong mẫu của bạn:

<form> 
... 
<input type="submit" name="list" value="List Objects" /> 
</form> 
<form> 
... 
<input type="submit" name="do-something-else" value="Do Something Else" /> 
</form> 

Theo quan điểm của bạn:

if 'list' in request.POST: 
    # do some listing... 
elif 'do-something-else' in request.POST: 
    # do something else 
+1

Nó phụ thuộc giá trị đặt ra cho cụ thể là gì nút gửi. Nếu đây là một chuỗi rỗng, giải pháp của bạn sẽ không hoạt động (vì '''', một chuỗi rỗng, được đánh giá là sai). – Tadeck

+0

Tôi sử dụng * ... * để hiển thị thông tin nhập khẩu là 'tên' không phải' giá trị' ... Sửa chữa ngay bây giờ, cảm ơn bạn. – FallenAngel

+0

Không sao cả. Nhưng có lẽ cách dễ dàng hơn là thay thế 'request.POST.get ('list')' bằng 'list 'trong request.POST'? – Tadeck

5

Một điều cần lưu ý để tránh nhầm lẫn. name của nút gửi sẽ không hiển thị nếu chỉ có một nút duy nhất trong biểu mẫu.

#template.html 
<form action="..." method="post"> 
<input type="submit" name = "first_button" value="Add"> 
</form> 

#view.py 
... 
'first_button' in request.POST #False 

#template.html 
<form action="..." method="post"> 
<input type="submit" name = "first_button" value="Add"> 
<input type="submit" name = "second_button" value="Remove"> 
</form> 

#view.py 
... 
'first_button' in request.POST #True if you clicked on that button 
Các vấn đề liên quan