Проблема с попыткой передать URL-адрес в качестве параметра в представление django

В моем представлении django у меня есть что-то вроде этого:

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//

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

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


person Delicinq    schedule 07.01.2011    source источник


Ответы (2)


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

Для этого вы можете использовать библиотеку urllib python:

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 не будет кодировать «/». Затем, чтобы декодировать это в вашем представлении, вы просто используете:

urllib.unquote(itemLink)
person Dominique Guardiola    schedule 07.01.2011

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

person girasquid    schedule 07.01.2011