Django URL 可以包含任意字符的多个参数

Django URL Multiple Paramaters that can contain any character

我想用 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", param3 = "22"

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

谢谢!

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

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