#python #google-app-engine
#python #google-app-engine
Вопрос:
У меня есть следующий код:
class MyHandler(webapp.RequestHandler):
def get(self, page_text, page=1): # page default value is 1, but it doesn't work
application = webapp.WSGIApplication([('/something/(page(d ))?/?', MyHandler)], debug=True)
Он должен захватывать URL-адреса, такие как:
/something/
/something/page1
/something/page1/
/something/page2
/something/page2/
/something/pageN
/something/pageN/
Когда используется первый URL-адрес ( /something/
), я все еще ожидаю, что он будет page
равен 1, но на самом деле page
равен None . Почему так происходит?
Ответ №1:
Просто обходной путь, ожидающий ответа гуру регулярных выражений:
class MyHandler(webapp.RequestHandler):
def get(self, page_text = None, page = 1)
application = webapp.WSGIApplication([('/something/', MyHandler)
('/something/(page(d ))?/?',MyHandler)],
debug=True)
Комментарии:
1. Теперь
page
всегда равно 1 (например. когда URL/something/page2
-адрес )2. Я думаю, вам следует заменить ?/? с помощью / .
3. @daemonfire300, похоже, SO снова удалил ваш код. Попробуйте пометить это как
the code
, чтобы оно отображалось как есть.4. Это правильный подход, вместо того, чтобы возиться с регулярными выражениями с переменным числом захваченных групп. Просто измените второе регулярное выражение, чтобы удалить внешние скобки и вопросительные знаки.
5. @Nick, не могли бы вы пояснить, почему это правильный подход? Зачем мне нужно иметь два элемента в webapp.WSGIApplication для одного обработчика? Решит ли это проблему со значениями по умолчанию?
Ответ №2:
Вот почти идентичная структура, которую я использую, и я рекомендую ее:
class PageHandler(BaseHandler):
def get(self, page_id):
('/page/([0-9] )', PageHandler),
Я точно не отвечаю на вопрос, но поскольку я очень доволен этим, и он может делать то, что вы хотите (страницы с идентификационными номерами), вы можете найти это полезным.