как убрать специальные символы в django urlpatterns - PullRequest
0 голосов
/ 01 сентября 2011

Итак, предположим, у меня есть приложение django, которое должно отвечать на URL-адрес, подобный этому: http://127.0.0.1:8000/food%20log/4/up/. Первоначальный параметр - «журнал еды», но ему нужно было заменить пространство на% 20, когда оно было включено в URL. Теперь ссылка нажата, и она возвращается к urls.py.

urlpatterns = patterns('',
(r'^(?P<content_type>\w+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$', process_vote),

... )

Итак, похоже, что он не может правильно распознать параметр. Это функциональный код до того, как вы захотите использовать content_type, в котором есть пробел. Если мы предположим, что на данный момент я не могу просто удалить пробел из имени этого content_type во всей остальной системе, как мне заставить функцию urlpatterns распознать, что «food% 20log» на самом деле - «журнал продуктов», чтобы он распознал его как действительный?

В основном я хочу предварительно обработать строку, прежде чем она будет обработана urlpatterns, но я не уверен, как и где это сделать. Спасибо за любую помощь.

1 Ответ

1 голос
/ 01 сентября 2011

Согласно руководству по Python для re модуля :

Если флаги LOCALE и UNICODE не указаны, соответствует любому буквенно-цифровому символу и символу подчеркивания;это эквивалентно набору [a-zA-Z0-9_].С LOCALE он будет соответствовать набору [0-9_] плюс любые символы, определенные как алфавитно-цифровые для текущей локали.Если задан UNICODE, он будет соответствовать символам [0-9_] и тому, что классифицируется как алфавитно-цифровое в базе данных свойств символов Unicode.

Так что, возможно, следует включить пробел в регулярное выражение в дополнение к \ш.

urlpatterns = patterns('',
(r'^(?P<content_type>[\w ]+)/(?P<object_id>\d+)/(?P<direction>up|down|clear)/$',     process_vote),
...