33

この URL https://stackoverflow.com/questions/ask?next=1&value=3からクエリ文字列を取得する必要があり、request.METAを使用したくありません。クエリ文字列を取得するには、さらに 2 つの方法があることがわかりました。

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

  2. URL エンコード の使用 urlencode を使用し、request.GET params 辞書をそれに渡し、文字列表現を取得します。

では、どの方法が良いでしょうか?私の同僚は urlencode を好みますが、満足のいく説明を提供していません。彼らは、urlparse が urlencode を内部的に呼び出していると主張していますが、これは urllib モジュールに urlencode が存在するため、私にはわかりません。

4

3 に答える 3

69

このようなGETパラメータを使用してクエリ文字列を作成できます

request.GET.urlencode()

これにはプレフィックスは含まれず?、元のリクエストと同じ順序でキーが返されない場合があります。

于 2012-07-01T10:55:10.863 に答える
60

3 番目のオプション:

>>> 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 のドキュメント

于 2012-07-01T09:49:58.987 に答える
56

私は使用することを好みます

request.META['QUERY_STRING']

ドキュメントから:

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

?これにはプレフィックスは含まれません。

于 2014-03-09T00:40:03.777 に答える