Маршрутизация webapp2 возвращает 404
Я пытаюсь использовать маршрутизацию webapp2, и это в настоящее время не удается. Кажется, он не соответствует правилам маршрутизации, которые я установил, и в результате возвращает 404 для определенных правил.
Мой код похож на:
main.py
import webapp2, urls
app = webapp2.WSGIApplication(urls.SITE_URL_PATTERNS, debug=True)
urls.py
from webapp2 import Route
from webapp2_extras import routes
import test_handler
SITE_URL_PATTERNS = [
routes.PathPrefixRoute('/admin', [
Route(r'/action_one', test_handler.take_action_one),
Route(r'/action_two', test_handler.take_action_two),
Route(r'/<action_three:\w+>', test_handler.take_action_three),
]),
Route(r'/view/action_one', test_handler.view_action_one),
Route(r'/', test_handler.view_homepage),
]
app.yaml
- url: .*
script: main.app
Я не могу загрузить /view/action_one (возвращает 404), но я могу загрузить /admin/action_one.
Любые предложения о том, что я делаю не так здесь? Ценю твою помощь!
1 ответ
Хорошо, я нашел свою глупую ошибку (да, настоящий момент "DOH!"):
Route(r'/<action_three:\w+>'
Должно быть
Route(r'/<action_three:[^/]+>'
У него возникли проблемы с соответствием ключей хранилища данных, поскольку они могут включать другие символы, представленные \w. Переходя ко всему остальному, но /, как правило, решит эту проблему (используйте [^/]+).
Надеюсь, это поможет кому-то еще.