webapp2: регулярное выражение в маршрутизации - PullRequest
2 голосов
/ 05 марта 2012

У меня такая проблема: я хочу, чтобы один метод класса обрабатывал разные URI (для URI "/ solution / add" и "solution / edit"). Так я написал такую ​​маршрутизацию:

app = webapp2.WSGIApplication([webapp2.Route(r'/solutions/(add|edit)', handler='solution.SolutionPage:add_edit_solution'), ], debug=True)

И webapp2 выдает ошибку 404. Не могли бы вы предложить решение этой проблемы?

Конечно, я могу написать разные маршруты для каждого URI, но это не так интересно.)

Ответы [ 2 ]

6 голосов
/ 05 марта 2012

Как показывают документы webapp2 , вы должны поместить регулярное выражение в угловые скобки с двоеточием, разделяющим имя и выражение. Имя не обязательно, но

все, что за пределами <>, не интерпретируется как регулярное выражение для сопоставления

Так что-то вроде этого: '/blog/<:\d{4}>/<:\d{2}>' Или в вашем случае это:

webapp2.Route(r'/solutions/<:(add|edit)>',
              handler='solution.SolutionPage:add_edit_solution')
0 голосов
/ 22 мая 2012

Если я могу что-то добавить.Для моих собственных целей я пытаюсь создать обработчик, который выполняет немного похожую операцию, но дело в том, что я использовал self.request.host или self.request.route вместо аргументов.

Выполнение этого и синтаксический анализ результата с использованием регистра переключателя или цикла if / elif / else позволяют мне создать класс с именем URIHandler, который используется для маршрутизации любых запросов на правильные ресурсы (даже страницы ошибок 404/500 / yyy)) динамически, без необходимости переписывать или добавлять маршрут для каждого нового ресурса.

Так что мне будет интересно сравнить два метода, чтобы немного их сравнить.

...