我需要从此 URL 获取查询字符串 https://stackoverflow.com/questions/ask?next=1&value=3 并且我不想使用 request.META。我发现还有两种方法可以获取查询字符串:
使用urlparse urlparse.urlparse(url).query
使用url编码 使用 urlencode 并将 request.GET params 字典传入其中以获取字符串表示形式。
那么哪种方式更好呢?我的同事更喜欢 urlencode 但没有提供令人满意的解释。他们声称 urlparse 在内部调用 urlencode,这是我不确定的事情,因为 urlencode 存在于 urllib 模块中。
您可以像这样使用 GET 参数创建查询字符串
request.GET.urlencode()
这不包括
?
前缀,并且它可能不会按照原始请求中的顺序返回键。
第三个选项:
>>> 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
我更喜欢使用
request.META['QUERY_STRING']
来自文档:
https://docs.djangoproject.com/en/stable/ref/request-response/#django.http.HttpRequest.META
这不包括
?
前缀。
已接受答案的附加信息
对于模板的使用,语法将是这样的
<a href="{{ request.path }}?{{ request.GET.urlencode }}">Link with all URL parameters</a>
替代方法是使用自定义过滤器