2013-12-01 1 views
-1

Я пытаюсь выполнить код для перенаправления перенаправления на django. Я предоставляю URL-адрес, и я хочу перенаправить предоставленный URL-адрес.Я не могу взять «?» символ в URL-адресе django url

в моем urls.py:

urlpatterns = patterns('', 
url(r'^redirect/(?P<name>.*)$', redirect), 
# ... 
) 

, когда я проверить функцию со стандартной линии связи (например: google.com), она прекрасно работает.

, когда я проверяю функцию ссылкой, содержащей "?" характер, только часть перед «?» учитывается.

Пример:

"GET /redirect/http://www.polyvore.com/lords_liverpool_hey_jude_tee/thing?id=53713291 HTTP/1.1" 302 0 

name = http://www.polyvore.com/lords_liverpool_hey_jude_tee/thing 

?id=53713291 не учитывается ....

я, хотя это означает, что все .* рода характер, не так?

Знаете ли вы, что происходит? и как взять URL-адрес entiere, какой персонаж он содержит?

большое спасибо за вашу помощь.

ответ

0

Возможно, вы не понимаете, как работает URL. Все после ? анализируется как аргументы для вашего текущего вида. Если печать данных в request.GET Словаре, вы найдете что-то вроде:

{'id': 53713291} 

Единственный способ исправить это UrlEncode ваш URL в аргументе и декодировать его перед перенаправлением.

>>> import urllib 
>>> urllib.quote_plus("http://www.polyvore.com/lords_liverpool_hey_jude_tee/thig?id=53713291") 
'http%3A%2F%2Fwww.polyvore.com%2Flords_liverpool_hey_jude_tee%2Fthing%3Fid%3D5313291' 
# You should make your URL with this value, for example: 
# /redirect/http%3A%2F%2Fwww.polyvore.com%2Flords_liverpool_hey_jude_tee%2Fthing%3Fid%3D5313291 
# And in your view, use unquote_plus before the redirection: 
>>> urllib.unquote_plus('http%3A%2F%2Fwww.polyvore.com%2Flords_liverpool_hey_jude_tee%2Fthing%3Fid%3D5313291') 
'http://www.polyvore.com/lords_liverpool_hey_jude_tee/thing?id=5313291' 

Дополнительная информация о Query String on Wikipedia.

+0

Я не думаю, что это поможет ему. Ему нужно начать с изучения регулярного выражения. – jpwagner

+0

Проблема не в регулярном выражении. Речь идет о том, как URL-адрес работает со стандартом HTTP. Символ '?' Имеет особое значение, не забывайте об этом. Все после него воспринимается как параметры GET. –

+0

В регулярном выражении есть способ избежать этого, это не проблема. Но в URL-адресе 'redirect/http: //domain.tld? Id = blabla' id = blabla - это строка запроса для адреса' redirect/http: // domain.tld', единственный способ избежать этого (не имея дело с уродливым случайным GET dict в представлении переадресации ...) заключается в том, чтобы избавиться от специальных символов, закодировав URL-адрес ... Шаблон URL-адреса здесь хорош, '. *' будет принимать все после 'redirect /' строка. –

0

Вы переходящая в регулярном выражении, так что вам нужно, чтобы избежать специальных символов (например, \?)

Но если вы пытаетесь передать параметры строки запроса вы хотите, чтобы справиться с этим по-разному: https://stackoverflow.com/a/3711911

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