2011-08-17 21 views
17

Có vẻ như Flask không hỗ trợ các tuyến đường có thành phần được mã hóa URI. Tôi tò mò nếu tôi làm điều gì đó sai, hoặc nếu có một lá cờ đặc biệt tôi cần phải bao gồm.Tuyến đường ống với thành phần mã hóa URI

tuyến đường của tôi trông giống như sau:

@app.route('/foo/<encoded>/bar/') 
def foo(encoded): 
    # ... 
    pass 

URL rằng đây phải phù hợp với thể trông giống như sau đây:

http://foobar.com/foo/xxx/bar/ # matched correctly, no URI component 
http://foobar.com/foo/x%2Fx%2Fx%2F/bar/ # not matched correctly, URI component 

Cựu công trình URL, sau spits ra một đáng yêu 404.

Cảm ơn!

Trả lời

24

Add path cho quy tắc url của bạn:

@app.route('/foo/<path:encoded>/bar/')

Cập nhật mỗi bình luận: Các tài liệu API tuyến đường đang ở đây: http://flask.pocoo.org/docs/api/#flask.Flask.route. Các lớp cơ bản mà thực hiện chuyển đổi tuyến đường path phong cách đang ở đây: http://werkzeug.pocoo.org/docs/routing/#custom-converters (. Đây là một trong những phần thật sự tốt đẹp của pocoostan) Theo như những dấu xuyệc, có những quy tắc đặc biệt mà số tiền:

Nếu một quy tắc kết thúc bằng dấu gạch chéo và được yêu cầu mà không có dấu gạch chéo bởi người dùng , người dùng sẽ tự động được chuyển hướng đến cùng một trang với một dấu gạch chéo theo sau được đính kèm.

Nếu quy tắc không kết thúc bằng dấu gạch chéo và người dùng yêu cầu trang có dấu gạch chéo, không tìm thấy 404.

Cũng nên nhớ rằng nếu bạn đang ở trên Apache và đang mong đợi một url slash-kéo, tức là một bookmarklet mà nộp để http://ex.com/foo/<path:encoded>/barencoded được một cái gì đó với dấu gạch chéo kép, Apache sẽ chuyển đổi nhiều dấu gạch chéo để một duy nhất.

+0

Rad, đã sửa nó. – sholsapp

+3

Trong trường hợp bất kỳ ai khác có cùng một vấn đề: tôi mất một phút để nhận ra rằng chúng tôi đã thêm 'đường dẫn', không thêm' mã hóa'. Tôi đã thử và không thêm được bộ lọc sau được mã hóa thay vì bộ lọc trước 'đường dẫn'. – gwg

+0

bạn và tôi cả! –

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