2012-01-04 12 views
5

Trong Flask bạn viết các tuyến đường trên tờ khai phương pháp như vậy:url cấu trúc và hình thức bài viết với Flask

@app.route('/search/<location>/') 
def search(): 
    return render_template('search.html') 

Tuy nhiên trong HTML dưới dạng biểu mẫu sẽ gửi đến các url theo kiểu này

www.myapp.com/search?location=paris 

sau này dường như trả lại 404 từ ứng dụng trong đó

www.myapp.com/search/london 

sẽ trả về như mong đợi.

Tôi chắc chắn rằng có một mẩu câu đố đơn giản mà tôi không nhận được, nhưng chắc chắn công cụ định tuyến sẽ xem xét các tham số chuỗi truy vấn để đáp ứng các yêu cầu quy tắc.

Nếu không phải giải pháp tối ưu cho trường hợp này là tôi chắc chắn 90% nhà phát triển phải đến thời điểm này ...

cảm ơn trước.

Trả lời

9

Các tham số truy vấn không được bao gồm như là một phần của kết hợp tuyến đường, cũng như không được đưa vào đối số chức năng. Chỉ các phần URL phù hợp mới được tiêm. Những gì bạn đang tìm kiếm là request.args (tham số truy vấn GET), request.form (POST) hoặc request.values (kết hợp).

Bạn có thể làm một cái gì đó như thế này nếu bạn muốn hỗ trợ cả hai:

@app.route('/search/<location>') 
def search(location=None): 
    location = location or request.args.get('location') 
    # perform search 

Mặc dù, giả sử bạn có thể muốn tìm kiếm trên các thông số khác, có lẽ là cách tốt nhất để làm điều đó sẽ được gần gũi hơn với:

def _search(location=None,other_param=None): 
    # perform search 

@app.route('/search') 
def search_custom(): 
    location = request.args.get('location') 
    # ... get other params too ... 
    return _search(location=location, other params ...) 

@app.route('/search/<location>') 
def search_location(location): 
    return _search(location=location) 

v.v.

+2

cảm ơn tuyệt vời! đến từ một nền tảng .net một số điều cần được rõ ràng đôi khi khó nắm bắt. trở lên! – Jay

+0

Đây là một khám phá hữu ích về request.args, request.form và request.values ​​- cảm ơn bạn – ghukill