给定如下的URL,如何解析查询参数的值?例如,在本例中,我想要some_key的值。
/some_path?some_key=some_value'
我在我的环境中使用Django;请求对象上是否有可以帮助我的方法?
我尝试使用self.request.get('some_key'),但它没有返回值some_value,因为我希望。
给定如下的URL,如何解析查询参数的值?例如,在本例中,我想要some_key的值。
/some_path?some_key=some_value'
我在我的环境中使用Django;请求对象上是否有可以帮助我的方法?
我尝试使用self.request.get('some_key'),但它没有返回值some_value,因为我希望。
当前回答
这不是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'文档
其他回答
顺便说一句,我有使用parse_qs()和获得空值参数的问题,并了解到您必须通过第二个可选参数“keep_blank_values”来返回查询字符串中不包含值的参数列表。默认为false。一些蹩脚的api需要参数,即使它们不包含任何值
for k,v in urlparse.parse_qs(p.query, True).items():
print k
import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)
print par['q'][0], par['p'][0]
您引用的url是一个查询类型,我看到请求对象支持一个称为arguments的方法来获取查询参数。你可能还想尝试self.request.get('def')直接从对象中获取你的值。
在纯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来解析URL字符串。这个方法总是以列表的形式返回值(而不是直接以字符串的形式),因为一个参数可以出现多次,例如:
http://example.com/?foo=bar&foo=baz&bar=baz
将返回:
{'foo': ['bar', 'baz'], 'bar': ['baz']}
这有点不方便,因为在大多数情况下,您要处理的URL没有多次具有相同的参数。该函数默认返回第一个值,如果有多个元素,则只返回一个列表。
from urllib import parse
def parse_urlargs(url):
query = parse.parse_qs(parse.urlparse(url).query)
return {k:v[0] if v and len(v) == 1 else v for k,v in query.items()}
例如,http://example.com/?foo=bar&foo=baz&bar=baz将返回:
{'foo': ['bar', 'baz'], 'bar': 'baz'}