I am trying to pass a few variables but I am having some trouble and specifically have 3 questions.
How do I encode the url string to take into account the special characters in the string?
What is the correct regex I should use given the strings?
And how do I decode the urls that have been encoded?
view
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?
template
<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 function
def video_player(request, author, video, related):
#how do I decode the urls that are encoded
edit
I tried it without related to see if it works but am still getting an error.
template:
<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'),
I get this error:
NoReverseMatch at /partner/BuzzFeed/
Reverse for ”video_player” with arguments ‘(‘BuzzFeed’, ‘fXkqhhIlOtA’, ‘NY Yankees: 6 Essential Pieces of Postseason Memorabilia’)’ and keyword arguments ‘{}’ not found.
full 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)),
)
Pass these variables as it is to template, there use url, before sending to template just do this in view.
View.py
template
Url.py
EDIT
If you want to go without related parameter, or if there is doubt video can also be None then just do this in your view:
now you can use the url by