Это было опубликовано для меня
<<em>*@google.com> писал:
Привет Никлас,
Если вы просто хотите отобразить это: / регион / город / категория / предположим
это только
это действительные символы: [a-zA-Z0-9_]
Вы можете сделать следующее:
- main.py
приложение =
webapp.WSGIApplication ([( '/ ([- \ ш] +) / ([- \ ш] +) / ([- \ ш] +)',
обработчик)], отлаживать = True)
и в вашем обработчике:
Обработчик класса (webapp.RequestHandler):
def get (самоуправление, регион, город, категория):
# Используйте эти переменные в методе
Надеюсь, это поможет!
Предполагается, что мое веб-приложение обрабатывает URI, например <region>/<city>/<category>
, с указанием необязательного города и категории, например
.
/rio_de_janeiro/grande_rio_de_janeiro/casas? #<region>/<city>/<category>
/gujarat/ahmedabad/vehicles-for_sale #<region>/<city>/<category>
/rio_de_janeiro/grande_rio_de_janeiro/ #<region>/<city>
/delhi #<region>
И т. Д. Теперь я хочу включить обработчик запросов, который может принимать необязательные аргументы, разделенные на разделитель /
. Если я использую регулярное выражение '/(.*)
и переменные в обработчике запросов, первая переменная становится a/b
, а вторая переменная становится b
, так что это почти то, что я хочу, но a и b вместо двух разных переменных. Регулярное выражение, которое я пробовал для обработчика запросов:
application = webapp.WSGIApplication([('/(.*)',MyPage),
И функциональная глава моего обработчика запросов
class MyPage(RequestHandler):
def get(self, location='frankfurt', category='electronics'):
Чтобы включить HTTP-запрос, например, / франкфурт, / франкфурт /, / франкфурт / электроника, / мадрид / апартаменты, / нью-йорк и т. д., допускающие все возможные комбинации. Можете ли вы посоветовать мне регулярное выражение, которое может достичь того, чего я хочу? Я хочу функциональность, как mod_rewrite, но для GAE.
Спасибо
Разъяснение
Это просто вопрос «сделать каталог переменной», поэтому для пояснения приведу несколько примеров, как он должен вести себя
'/ Франкфурт', - введите переменную "Франкфурт" в 1
'/ Франкфурт /', - поставить переменную "Франкфурт" в 1
'/ frankfurt / electronics', - поставить 'frankfurt' в переменной 1, а 'electronics' в переменной 2
'/ Франкфурт / электроника /', такой же как выше
'/ eu / frankfurt / electronics', то же, что и выше, т.е. учитываются только последние 2 группы
'/ ЕС / Франкфурт / электроника /', так же, как и выше
«Торонто / молнии», не начинается с / так не будет работать
«Торонто / молнии /», как указано выше
«Лима / Автомобили / Старый», как указано выше
'lima / cars / old /' как указано выше
Типичными случаями, которые я хочу обработать, является / region / city / category, т.е. если я применил пример к Бразилии, это может быть / rio_de_janeiro / grande_rio_de_janeiro / casas? для / регион / город / категория или для Индии это может быть / delhi / delhi / for_sale или / gujarat / ahmedabad / Vehicles-for_sale
Решение
Насколько я могу судить, решение из ответа работает для моих целей:
/(?:[^/]+)/?([^/]*)/?([^/]*)