从URL中检索参数

给定一个像下面这样的URL,我怎样才能parsing查询参数的值? 例如,在这种情况下,我想要def的值。

 /abc?def='ghi' 

我在我的环境中使用Django; request对象上有一个方法可以帮助我吗?

我尝试使用self.request.get('def')但它并没有像我希望的那样返回值ghi

试试这样的事情:

 import urlparse url = 'http://foo.appspot.com/abc?def=ghi' parsed = urlparse.urlparse(url) print urlparse.parse_qs(parsed.query)['def'] 
 import urlparse url = 'http://example.com/?q=abc&p=123' par = urlparse.parse_qs(urlparse.urlparse(url).query) print par['q'], par['p'] 

我很震惊,这个解决scheme已经不在这里了。 使用:

 self.request.GET.get('variable_name') 

这将从“GET”字典中“获取”variables,如果存在则返回“variable_name”值,如果不存在则返回None对象。

我知道这有点晚了,但是今天我发现自己在这里,我认为这可能是其他人的一个有用的答案。

 import urlparse url = 'http://example.com/?q=abc&p=123' parsed = urlparse.urlparse(url) params = urlparse.parse_qsl(parsed.query) for x,y in params: print "Parameter = "+x,"Value = "+y 

使用parse_qsl(),“数据作为名称,值对的列表返回”。

有一个叫做furl的新库。 我发现这个库是做代码的最pythonic。 安装:

 pip install furl 

码:

 from furl import furl f = furl("/abc?def='ghi'") print f.args['def'] 

对于Python> 3.4

 from urllib import parse url = 'http://foo.appspot.com/abc?def=ghi' parse.parse_qs(parse.urlparse(self.get_next_link()).query)['def'][0] 

你引用的URL是一个查询types,我看到请求对象支持一个称为参数的方法来获取查询参数。 您也可以直接尝试self.request.get('def')以从对象中获取您的值。

 def getParams(url): params = url.split("?")[1] params = params.split('=') pairs = zip(params[0::2], params[1::2]) answer = dict((k,v) for k,v in pairs) 

希望这可以帮助

urlparse模块提供您需要的一切:

urlparse.parse_qs()

 import cgitb cgitb.enable() import cgi print "Content-Type: text/plain;charset=utf-8" print form = cgi.FieldStorage() i = int(form.getvalue('a'))+int(form.getvalue('b')) print i 

没有必要这样做。 只与

 self.request.get('variable_name') 

请注意,我没有指定方法(GET,POST等)。 这是有据可查的 , 这是一个例子

您使用Django模板的事实并不意味着该处理程序也由Django处理

在纯Python中:

 def get_param_from_url(url, param_name): return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0] 

顺便说一句,我遇到了问题,使用parse_qs()并获取空值参数,并获悉您必须传递第二个可选参数'keep_blank_values'返回一个查询string中不包含值的参数列表。 它默认为false。 一些蹩脚的书面API需要参数,即使它们不包含任何值

 for k,v in urlparse.parse_qs(p.query, True).items(): print k 

有一个很好的库w3lib.url

 from w3lib.url import url_query_parameter url = "/abc?def=ghi" print url_query_parameter(url, 'def') ghi