2012-09-19 29 views
16

Tôi có một chọn nhiều mục trong tập tin html như thế này:Tiếp cận Multiselect Form Field trong Flask

<select multiple id="mymultiselect" name="mymultiselect">   
     <option value="1">this</option>  
     <option value="2">that</option>  
     <option value="3">other thing</option> 
</select> 

Khi tôi truy cập vào lĩnh vực mymultiselect trong bình/python qua:

request.form['mymultiselect'] 

hoặc bằng cách sử dụng theo yêu cầu Hàm .args.get nó chỉ trả về một mục được chọn. Tôi đã học được rằng để có được tất cả các mục đã chọn, tôi phải thêm [] vào tên của trường, như vậy:

<select multiple id="mymultiselect" name="mymultiselect[]">  
     <option value="1">this</option>  
     <option value="2">that</option>  
     <option value="3">other thing</option> 
</select> 

Tôi có thể xem bằng cách xem dữ liệu bài trong firebug đang hoạt động, nhưng Tôi bất cứ lúc nào tôi cố gắng truy cập vào trường này trong bình/python nó trở lại là null hoặc None.

Làm cách nào để bạn truy cập vào các trường biểu mẫu nhiều lựa chọn này có "[]" ở cuối tên của chúng? Tôi đã thử thêm "[]" vào tên trường trong mã python, nhưng điều đó dường như không hoạt động.

Trả lời

43

Bạn muốn sử dụng getlist() function để có được một danh sách các giá trị:

multiselect = request.form.getlist('mymultiselect') 

Bạn làm không cần phải thêm [] tên để làm cho công việc này; trên thực tế, [] sẽ không giúp ích gì, không sử dụng nó.

+0

Cảm ơn sự giúp đỡ. Tôi biết tôi đã làm điều gì đó sai, vẫn còn mới để bình ... – kj4ohh

+0

Điều này đã cho tôi không thể tin được lâu để tìm - gỡ lỗi này nó thậm chí không rõ ràng rằng Flask là vấn đề, nó chỉ khi tôi tìm thấy PHP '[]' mà tôi nghĩ tìm kiếm Python/Flask cụ thể. Bất kỳ ý tưởng nào tại sao 'get' không trả về danh sách? Tôi không thể nhìn thấy bất kỳ mong muốn trong hành vi này ở tất cả ... Nó đặc biệt kỳ lạ như 'get' trả về yếu tố đầu tiên. Gah. – OJFord

+0

Vậy điều gì xảy ra nếu chỉ có một phần tử? Khi nào 'get' trả về một danh sách và khi nào một giá trị? API rõ ràng ở đây; 'get' trả về một giá trị, luôn luôn. 'getlist' trả về một danh sách, luôn luôn. –

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