2014-01-13 3 views
1

Мне нужно сопоставить закодированные URL-адреса в URL-адресе, который равен% 20.Регулярное выражение регулярного выражения Django не соответствует

Мой URL будет что-то вроде

http://domain/something/hello%20world 

Вот это мой URL конф и вид

url(r'^regtest/(\w+[%20]?\w+)', views.regView) 

Вид:

def regView(request, x, y=None):          
    print x, 'and', y            
    return HttpResponse('+OK') 

Вот бревна, когда я получил удар от адреса

http://127.0.0.1:8000/regtest/hello%20world 

hello and None 
[13/Jan/2014 02:12:31] "GET /regtest/hello%20world HTTP/1.1" 200 3 

ответ

1

Обводка [%20] соответствует %, 2 или 0.

Используйте следующее регулярное выражение вместо того, чтобы соответствовать слово символ (\w) или (|), %20:

r'^regtest/((?:\w|%20)+)' 

>>> import re 
>>> matched = re.search(r'regtest/((?:\w|%20)+)', 'regtest/hello%20world') 
>>> matched.group(1) 
'hello%20world' 

UPDATE

%20 интерпретируется Django и декодируется как пространство (). Таким образом, вы должны сопоставить пространство вместо %20.

r'^regtest/([\w\s]+)' 
+0

Он даже не подходит, когда я использую его в URL-адресе. Я перекрестно проверил, что один, –

+0

Я тоже пробовал следующий регулярный эксперимент. (\ w + (% 20)? \ W +) –

+0

@naveentamanam, Что относительно '([^ /] +)'? – falsetru

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