Django URL可以包含任何字符

时间:2015-09-28 21:48:09

标签: django url parameters

我想通过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中第二个破折号后的开始。知道解决这个问题的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分: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')