我想通过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中第二个破折号后的开始。知道解决这个问题的最佳方法是什么?
谢谢!
答案 0 :(得分:1)
在这种情况下,我个人会使用查询字符串作为参数。上面给出的例子将使用:
/example/?param1=http%3A%2F%2Fcnn.com¶m2=red¶m3=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')