给定如下的URL,如何解析查询参数的值?例如,在本例中,我想要some_key的值。

/some_path?some_key=some_value'

我在我的环境中使用Django;请求对象上是否有可以帮助我的方法?

我尝试使用self.request.get('some_key'),但它没有返回值some_value,因为我希望。


当前回答

没有必要做这些。只有

self.request.get('variable_name')

注意,我没有指定方法(GET、POST等)。这是一个很好的例子

你使用Django模板这一事实并不意味着Django也会处理这个处理器

其他回答

这不是Django特有的,而是一般的Python。关于Django的具体答案,请看来自@jball037的这个

Python 2:

import urlparse

url = 'https://www.example.com/some_path?some_key=some_value'
parsed = urlparse.urlparse(url)
captured_value = urlparse.parse_qs(parsed.query)['some_key'][0]

print captured_value

Python 3:

from urllib.parse import urlparse
from urllib.parse import parse_qs

url = 'https://www.example.com/some_path?some_key=some_value'
parsed_url = urlparse(url)
captured_value = parse_qs(parsed_url.query)['some_key'][0]

print(captured_value)

Parse_qs返回一个列表。[0]获取列表的第一项,因此每个脚本的输出是some_value

下面是Python 3的'parse_qs'文档

有一个叫做furl的新库。我发现这个库是最python化的url代数。 如何安装:

pip install furl

代码:

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

顺便说一句,我有使用parse_qs()和获得空值参数的问题,并了解到您必须通过第二个可选参数“keep_blank_values”来返回查询字符串中不包含值的参数列表。默认为false。一些蹩脚的api需要参数,即使它们不包含任何值

for k,v in urlparse.parse_qs(p.query, True).items():
  print k
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)

希望这能有所帮助

在原始python中解析它:

path = '/some_path?k1=v1&k2=v2&k3=v3'
_, query_string = path.split('?')
params  = dict(param.split('=') for param in query_string.split('&'))
print(params)

输出:

{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}