Как передать переменные в django через url-адрес?

Я пытаюсь передать несколько переменных, но у меня возникли некоторые проблемы, а конкретно 3 вопроса. Как кодировать строку url, чтобы учесть специальные символы в строке? Каково правильное регулярное выражение, которое я должен использовать, учитывая строки? И как расшифровать URL-адреса, которые были закодированы?

посмотреть

author = 'foo'
video = 'bar123-456'
title = 'Santorum: "I'm Not a Visionary"' # in my version, it is referencing another variable so the syntax error doesn't occur. But I left it in here because I want to know how to deal with " and '.
related = 'http://gdata.youtube.com/feeds/api/users/haha/uploads?v=2&max-results=50'

url = urllib.quote('partner/' + author+ '/'+ video+'/'+ title + '/' + related)
#How do I encode this url string above to take into account the special characters in the string?

шаблон

<a href="/{{url}}" > <img src="img.png" > </a>

urls.py

url(r'^partner/(?P<partner_name>[-w]+)/(?P<video_id>[-w]+)/(?P<video_title>[-w]+)//(?P<related_feed>)/$', 'video_player'),
#do I have to add anything to the regex?

video_player функция

def video_player(request, author, video, related):
    #how do I decode the urls that are encoded

редактировать

я попробовал его без связи, чтобы увидеть, работает ли он, но все еще получаю ошибку.

шаблон:

<a href="{% url 'reserve.views.video_player' author video title   %}" >

url:

url(r'^partner/(?P<author>[-w]+)/(?P<video>[-w]+)/(?P<title>[-w]+)/$', 'video_player'),

Я получаю эту ошибку:

NoReverseMatch at / партнер / BuzzFeed/ Реверс для "video_player" с аргументами " ("BuzzFeed", "fXkqhhIlOtA", "NY Yankees: 6 основных частей памятных вещей после сезона") "и аргументами ключевых слов" {} " не найден.

полный urls.py

urlpatterns = patterns('reserve.views',
    url(r'^$', 'index'),
    url(r'^browse/$', 'browse'),
    url(r'^faq/$', 'faq'),
    url(r'^about/$', 'about'),
    url(r'^contactinfo/$', 'contactinfo'),
    url(r'^search/$', 'search'),
    (r'^accounts/', include('registration.backends.default.urls')),
    (r'^accounts/profile/$', 'profile'),
    (r'^accounts/create_profile/$', 'user_profile'),
    (r'^accounts/edit_profile/$', 'edit_profile'),
    url(r'^products/(?P<product_name>[-w]+)/reviews/$', 'view_reviews'),
    url(r'^products/(?P<product_id>d+)/reviews/$', 'view_reviews'),
    url(r'^user/(?P<user_id>[-w]+)/$', 'view_reviews_user'),
    #url(r'^category/(?P<category_name>[-w]+)/$', 'view_product_category'),
    url(r'^partner/(?P<partner_name>[-w]+)/$', 'partner_channel'),
    url(r'^partner/(?P<author>[-w]+)/(?P<video>[-w]+)/(?P<video_title>[-w]+)/$', 'video_player'),
    url(r'^partner/(?P<author>[-w]+)/(?P<video>w+)/(?P<title>w+)/$', 'video_player'),
    url(r'^admin/', include(admin.site.urls)),
)

1 ответов


передайте эти переменные как есть в шаблон, там используйте URL-адресом перед отправкой в шаблон просто делать это в виду.

View.py

related = urllib.quote(related, safe='')

шаблон

<a href="{% url 'path.to.video_player' author video related %}" > <img src="img.png" > </a>

Url.py

url(r'^partner/(?P<author>[-\w]+)/(?P<video>\w+)/(?P<related>\w+)/$', 'video_player'),

редактировать

если вы хотите пойти без родственного параметра, или если видео сомнения может также быть никаким после этого как раз сделайте это в вашем вид:

def video_player(request, author, video=None, related=None):

теперь вы можете использовать url по

<a href="{% url 'path.to.video_player' author video %}" > <img src="img.png" > </a>