Я пытаюсь ввести django для перенаправления перенаправления. Я предоставляю URL-адрес, и я хочу перенаправить предоставленный 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, какой персонаж он содержит?
Большое спасибо за Вашу помощь.
Вы переходите в регулярное выражение, поэтому вам нужно избегать специальных символов (например, \?)
Но если вы пытаетесь передать параметры querystring, вы захотите обработать это по-другому: qaru.site/questions/173149/...
Кажется, вы не понимаете, как работает URL. Все после ?
анализируется как аргументы для вашего текущего представления. Если вы печатаете данные в своем request.GET
dict, вы найдете что-то вроде:
{'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 в Википедии.
?
характер имеет особое значение, не забывайте это. Все после него принимается за параметры GET.