2010-01-29 23 views
15

Tôi có biểu mẫu django với hai nút gửi khác nhau, trên trang xem biểu mẫu được gửi tới đâu tôi cần biết nút gửi được nhấn và chụp hành động khác nhau cho phù hợp.Yêu cầu Django.POST không chứa tên của nút đã gửi biểu mẫu

Từ những gì tôi đã đọc tên hoặc id của nút gửi phải ở đâu đó trong từ điển request.POST, nhưng không có ở đó!

Đây là một đoạn của hình thức của tôi:

<form id="editPaperForm" action="{{paper.editURL}}" method="POST"> 
    <input type="submit" name="savePaperButton" id="savePaperButton" value="Save and Send Later"/> 
    <input type="submit" name="sendPaperButton" id="sendPaperButton" value="Save and send"/> 

    ... 

</form> 

Trong giao diện:

... 
if 'sendPaperButton' in request.POST: 
    return applicants_confirmSend(request, paperID) 
else: 
    return applicants_home(request) 

sendPaperButton là không bao giờ trong request.POST, và không phải là một trong những khác, tôi nên tìm kiếm ở đâu khác?

Ý tưởng duy nhất tôi có là để thêm một lĩnh vực ẩn và sửa đổi nó thông qua javascript trước khi gởi đơn nhưng điều đó dường như loại dư thừa vì tôi khá chắc chắn rằng dữ liệu nên có một nơi nào đó ...

Cảm ơn !

+1

Bạn đã thử xem những gì trình duyệt của bạn gửi qua trình gỡ rối http như Charles hay Fiddler? –

+0

Không, tôi không có, nhưng bạn khiến tôi tò mò về những gì trình duyệt đang gửi nên tôi đã thử một trình duyệt khác (đang sử dụng Firefox 3.5, dùng thử Chrome 4 và IE6), hóa ra Chrome và IE6 gửi id và giá trị nút, Firefox không ... đoán đầu vào ẩn với giá trị gia tăng Javascript là lựa chọn duy nhất của tôi? –

+0

Tại sao không sử dụng hộp kiểm hoặc một số yếu tố biểu mẫu thích hợp khác? –

Trả lời

28

Đừng quên thêm thông số tên và giá trị vào trường "nút" hoặc "loại đầu vào = gửi" của biểu mẫu. Tôi đã có cùng một vấn đề một lần và nó làm tôi phát điên.

Tóm lại, theo yêu cầu.POST chứa một dict, bạn cần một khóa và một giá trị. Khóa tương ứng với thông số tên của nút của bạn và giá trị của giá trị dict cho giá trị của nút.

<button type="submit" value="preview">Preview</button> 

sẽ không được phản ánh trong request.POST (không có chìa khóa cho từ điển POST!), Trong khi

<button type="submit" value="preview" name="preview">Preview</button> 

sẽ có một chìa khóa "xem trước" có giá trị "xem trước".

+0

Đây chính xác là những gì tôi đã quên. Cảm ơn gợi ý! – Patrick

+0

Gặp sự cố trong phiên bản Google Chrome mới nhất với phiên bản này, mặc dù nó hoạt động tốt với phiên bản mới nhất của Firefox. – Pat

+0

Điều này cố định một vấn đề tương tự tôi đã có nơi các trường biểu mẫu có ID duy nhất và không có 'tên', và POST không chứa dữ liệu! Đã lái xe cho tôi hạt! Cảm ơn! – jozzas

0

Vì một lý do nào đó, trong Chrome, khi tôi có hai nút sử dụng các thẻ <input/>, nó thực sự sẽ xử lý nút mà tôi không nhấp vào làm đầu vào. Bằng cách đó, khi tôi thử nghiệm một cái gì đó như 'sendPaperButton' in request.POST, nó sẽ trả về điều ngược lại với những gì tôi muốn.

Tôi đã thay đổi các thẻ này thành <button></button> và hoạt động tốt.

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