如何通过 url 在 django 中传递变量? [英] How do I pass variables in django through the url?

查看:41
本文介绍了如何通过 url 在 django 中传递变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试传递一些变量,但遇到了一些问题,特别是有 3 个问题.如何编码 url 字符串以考虑字符串中的特殊字符?给定字符串我应该使用什么正确的正则表达式?以及如何解码已编码的网址?

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?

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

编辑

我在不相关的情况下尝试了它,看看它是否有效,但仍然出现错误.

edit

I tried it without related to see if it works but am still getting an error.

模板:

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

网址:

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

我收到此错误:

NoReverseMatch 在/partner/BuzzFeed/反转video_player",参数为('BuzzFeed', 'fXkqhhIlOtA', 'NY Yankees: 6 Essential Pieces of Postseason Memorabilia')' 和关键字参数'{}'未找到.

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.

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

推荐答案

将这些变量原样传递给模板,使用 url,在发送到模板之前只需在视图中执行此操作.

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

模板

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

编辑

如果你想不使用相关参数,或者如果有疑问 video 也可以是 None 那么就在你的视图中这样做:

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):

现在您可以通过

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

这篇关于如何通过 url 在 django 中传递变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆