从Python中的URL获取查询字符串的最佳方法?

问题描述 投票:0回答:4

我需要从此 URL 获取查询字符串 https://stackoverflow.com/questions/ask?next=1&value=3 并且我不想使用 request.META。我发现还有两种方法可以获取查询字符串:

  1. 使用urlparse urlparse.urlparse(url).query

  2. 使用url编码 使用 urlencode 并将 request.GET params 字典传入其中以获取字符串表示形式。

那么哪种方式更好呢?我的同事更喜欢 urlencode 但没有提供令人满意的解释。他们声称 urlparse 在内部调用 urlencode,这是我不确定的事情,因为 urlencode 存在于 urllib 模块中。

python django comparison urlencode urlparse
4个回答
75
投票

您可以像这样使用 GET 参数创建查询字符串

request.GET.urlencode()

这不包括

?
前缀,并且它可能不会按照原始请求中的顺序返回键。


65
投票

第三个选项:

>>> from urlparse import urlparse, parse_qs
>>> url = 'http://something.com?blah=1&x=2'
>>> urlparse(url).query
'blah=1&x=2'
>>> parse_qs(urlparse(url).query)
{'blah': ['1'], 'x': ['2']}

在 Python 3+ 中,这可以用作:

from urllib.parse import parse_qs

urllib.parse 的文档


59
投票

我更喜欢使用

request.META['QUERY_STRING']

来自文档:

https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpRequest.META

这不包括

?
前缀。


0
投票

已接受答案的附加信息

对于模板的使用,语法将是这样的

<a href="{{ request.path }}?{{ request.GET.urlencode }}">Link with all URL parameters</a>

替代方法是使用自定义过滤器

https://stackoverflow.com/a/24135527/417899

© www.soinside.com 2019 - 2024. All rights reserved.