2015-08-22 3 views
0

У меня есть следующий маршрут в моем urls.py:Django URL десериализации вопрос

url(r'^tag/(?P<tag>[-\w]+)/$', render_search, name="search_by_tag"), 

Итак, я прохожу тег туда и получить результат, например /tag/python/, /tag/django/

Но он терпит неудачу, когда я прохожу там что-то вроде /tag/C++/, и он даже терпит неудачу, когда я передаю закодированное значение: /tag/C%2B%2B/

Как я могу исправить это и принять закодированные значения на внутреннем сервере?

ответ

2

Здесь все о регулярном выражении. Шаблон Regex, который вы предоставили, будет принимать только буквы, цифры, подчеркивание и «-». Для того, чтобы принять все возможные символы (за исключением «/» и «?»), Вы должны сделать регулярное выражение как это:

url(r'^tag/(?P<tag>[^/?]+)/$', render_search, name="search_by_tag"), 

, но это не хорошая идея, вы должны лучше slugify ваших имен тегов и использование, которое slugified формы в URL вместо ,

+0

Не могли бы вы немного объяснить, почему это регулярное выражение не очень хорошая идея? – Vladimir

+0

Прежде всего - они будут выглядеть уродливыми. Некоторые символы будут закодированы браузерами, некоторые из них будут кодироваться на вашем сайте, и это будет выглядеть не очень хорошо. Во-вторых - в некоторых браузерах могут быть некоторые проблемы, а третья причина - когда кто-то скопирует этот URL-адрес и вставляет его где-нибудь - этот ввод может запретить некоторые символы в URL-адресе. Это просто хорошая конвенция, чтобы поместить внутри url только некоторые символы. – GwynBleidD

Смежные вопросы