Проблема при попытке передать URL в качестве параметра в представление Django - PullRequest
2 голосов
/ 07 января 2011

В моем представлении 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 из-задополнительные "/ 's".Похоже, мне нужно либо каким-то образом изменить свое регулярное выражение url, либо как-то кодировать URL-адрес или передать его по-другому ....

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

Ответы [ 2 ]

4 голосов
/ 07 января 2011

Чтобы решить проблему с дополнительными слешами, вы должны url-кодировать параметр itemLink (то есть, перед его передачей, в определении абсолютного 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 не будет кодировать "/" Затем, чтобы расшифровать это, по вашему мнению, вы должны использовать:

urllib.unquote(itemLink)
0 голосов
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...