How do I pass variables in django through the url?

44,752

Solution 1

Pass these variables as it is to template, there use url, before sending to template just do this in view.

View.py

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

template

<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'),

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:

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

now you can use the url by

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

Solution 2

in newer versions of python you could simply just type: Example:

path('<int:id>/delete/', delete_view, name = 'delete'),
Share:
44,752
sharataka
Author by

sharataka

Updated on March 20, 2020

Comments

  • sharataka
    sharataka about 4 years

    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)),
    )
    
  • sharataka
    sharataka over 11 years
    I tried it without related to see if it works but am still getting an error. I updated the question above under "edit".
  • sharataka
    sharataka over 11 years
    I replaced related with title. From the error that I'm getting references all the variables I want to pass (error display in the edit of the question above), but it says there is NoReverseMatch and keyword arguments not found.