У меня такая проблема: я хочу, чтобы один метод класса обрабатывал разные URI (для URI «/ solution/add» и «solution/edit»). Поэтому я написал такую маршрутизацию:webapp2: regex in routing
app = webapp2.WSGIApplication([webapp2.Route(r'/solutions/(add|edit)', handler='solution.SolutionPage:add_edit_solution'), ], debug=True)
И webapp2 дает ошибку 404. Не могли бы вы предложить решение этой проблемы?
Ofcourse Я могу писать различные маршруты для каждого URI, но это не так интересно.)
Это дает ошибку: ТипError: add_edit_solution() принимает ровно 1 аргумент (2 данных). Я думаю, что эта ошибка возникает, потому что это выражение предназначено для получения аргументов (например, «product_id» и т. Д.). – Dimitry
@Dimitry, правильно. В чем проблема? Когда вы передаете регулярное выражение в 'Route', он вызывает обработчик с группами из регулярного выражения в качестве позиционных аргументов или как аргументы ключевого слова, если вы даете им имена. «[Имя, если определено] (http://webapp-improved.appspot.com/guide/routing.html#the-url-template), используется для создания URL-адресов для маршрута. Когда он установлен, значение согласованного регулярного выражения передается как ключевой аргумент обработчику, иначе он передается как позиционный аргумент. " Поэтому, если вы хотите использовать регулярное выражение здесь, вам нужно передать обработчик, который принимает * args или ** kwargs. Период. – senderle
Ну, да) Это работает. Спасибо. В начале я думал по-другому реализовать это, я хотел реализовать это без каких-либо аргументов, но, как я вижу, теперь использование аргументов является лучшим способом. – Dimitry