2011-01-07 1 views
2

На мой взгляд Джанго У меня есть что-то вроде этого:Проблема пытается передать URL в качестве параметра в целях Джанго

def addOtherItemsForUserAndEvent(request, eventId, itemName, itemLink): 

Это соответствует с моим urls.py, где у меня есть это:

(r'^addOtherItemsForUserAndEvent/(?P<eventId>\d+)/(?P<itemName>\w{0,100})/(?P<itemLink>\w{0,500})/$', 'gatherings.views.addOtherItemsForUserAndEvent'), 

Целью этого является создание элемента с именем и URL-адресом элемента, а затем добавление этого элемента в событие. Я пытаюсь использовать это с помощью вызова ajax, и это работает, но очень легко сломается.

Моя проблема всплывает, когда я пытаюсь передать фактический URL как ссылку элемента, как это:

http://127.0.0.1:8000/addOtherItemsForUserAndEvent/1/Pony/http://www.google.ca//

В приведенном выше примере следует создать элемент с именем лошадка со ссылкой на Google , но это не соответствует моему URL из-за дополнительных «/». Кажется, мне либо нужно как-то изменить свое регулярное выражение, либо каким-то образом закодировать URL-адрес, либо передать его по-другому ....

Любая помощь была бы принята с благодарностью!

ответ

0

Возможно, вы захотите изменить URL-адрес регулярного выражения до .{0,500} в последней части - \w не будет соответствовать пунктуации в вашем URL-адресе.

4

Для решения Лишних слэшей проблемы, вы должны URL-кодировать параметр itemLink (то есть, перед передачей его, в определении asolute URL-адрес этого пункта)

Вы можете использовать библиотеку Python URLLIB, чтобы сделать это :

import urllib 
#when defining the absolute url in get_absolute_url() for example 
urllib.quote('http://www.google.ca/?q=django', safe='') 
# which will output 
>> 'http%3A%2F%2Fwww.google.ca%2F%3Fq%3Ddjango' 

пустой сейф параметр необходим, или URLLIB не будет кодировать «/» Тогда для декодирования это с вашей точки зрения, ты Juste использование:

urllib.unquote(itemLink)