从URL中获取参数

256 投票
21 回答
307294 浏览
提问于 2025-04-16 12:16

给定一个像下面这样的URL,我该如何提取查询参数的值呢?比如在这个例子中,我想要获取some_key的值。

/some_path?some_key=some_value'

我在使用Django这个框架;在request对象上有没有什么方法可以帮我呢?

我试着用self.request.get('some_key')来获取,但它没有返回我期待的值some_value

21 个回答

70

适用于 Python 版本大于 3.4

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

我很惊讶这个解决方案居然还没有人分享。你可以使用:

request.GET.get('variable_name')

这个代码会从“GET”字典中“获取”变量,如果这个变量存在,就返回它的值;如果不存在,就返回一个空的对象(None)。

438

这不是专门针对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'的文档

撰写回答