【问题标题】:Django URL Multiple Paramaters that can contain any character可以包含任何字符的 Django URL 多个参数
【发布时间】:2015-09-28 21:48:08
【问题描述】:

我想通过 Django 的 URL 发送多个参数。通常我可以执行以下操作:

 url(r'^example/(?P<param1>[\w|\W]+)/(?P<param2>[\w|\W]+)/(?P<param3>[\w|\W]+)/$', views.example, name='example')

问题是我的 3 个参数可以包含任何字符,包括“/”,所以如果 param1 是一个 URL 本身,那么如果传递以下参数,它将混淆其他参数:

param1 = "http://cnn.com", param2 = "red", and param3 = "22"

Django 会将 param2 解释为在 http://cnn.com 中的第二个破折号之后开始。知道解决此问题的最佳方法是什么吗?

谢谢!

【问题讨论】:

    标签: django url parameters


    【解决方案1】:

    在这种情况下,我会亲自为您的参数使用查询字符串。上面给出的示例将使用:

    /example/?param1=http%3A%2F%2Fcnn.com&param2=red&param3=22
    

    在 Python 3 中,您可以这样做:

    import urllib.parse
    
    urllib.parse.urlencode({'param1': 'http://cnn.com', 'param2': 'red', 'param3': '22'})
    

    在 Python 2 中,您可以这样做:

    import urllib
    
    urllib.urlencode({'param1': 'http://cnn.com', 'param2': 'red', 'param3': '22'})
    

    另一方面,如果您绝对必须将它们保留为实际路径的一部分,您可以在构建 URL 之前简单地应用 url 引用,因此您的 URL 将如下所示:

    /example/http%3A%2F%2Fcnn.com/red/22/
    

    在 Python 3 中,您可以这样做:

    import urllib.parse
    
    urllib.parse.quote_plus('http://cnn.com')
    

    在 Python 2 中,您将使用:

    import urllib
    
    urllib.quote_plus('http://cnn.com')
    

    【讨论】:

    • 如果您解析的 url 包含它自己的查询字符串,例如这样的链接,这仍然有效:nytimes.com/2015/09/06/opinion/sunday/…
    • 是的! &gt;&gt;&gt; urllib.parse.quote_plus('http://www.nytimes.com/2015/09/06/opinion/sunday/adam-grant-friends-at-work-not-so-much.html?smid=tw-share&amp;_r=1') 'http%3A%2F%2Fwww.nytimes.com%2F2015%2F09%2F06%2Fopinion%2Fsunday%2Fadam-grant-friends-at-work-not-so-much.html%3Fsmid%3Dtw-share%26_r%3D1'
    猜你喜欢
    • 2020-08-23
    • 2018-04-20
    • 2014-09-20
    • 2013-06-23
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    相关资源
    最近更新 更多