2012-07-01 6 views
19

私はこのURLを持っています= https://stackoverflow.com/questions/ask?next=1&value=3 このURLからクエリ文字列を取得する必要があります。 私はクエリ文字列を取得するためにrequest.METAを使用したくありません。どのようにこれまで私は、クエリ文字列を取得するには、2つの以上の方法が.queryは、URLエンコードを使用してpythonのURLからクエリ文字列を取得する最も良い方法は?

  • それをDATS 使用urlparse.urlparse(URL)urlparse使用

    1. があること、それを考え出しました 使用でurlencode、それの文字列表現を取得するには、それにrequest.GETのparams辞書を渡す....

    だから、どのようにクエリ文字列を取得する方がいいですか? 私の同僚の何人かは、urlencodeがはるかに優れていると言っていますが、私は満足していません。これまでの回答はurlparseが内部的にurlencodeを呼び出していると言いました。この点についても、urlparseとurlencodeは完全にindependent.as urlencodeはurllibモジュールにあります....このことを明確にしてください。

  • 答えて

    38

    あなたはこの

    request.GET.urlencode() 
    
    などのGETパラメータを使用してクエリ文字列を作ることができます

    これには接頭辞?は含まれておらず、元の要求と同じ順序でキーを返すことはできません。

    +7

    QueryDictは順序付けられていない辞書をラップするので、request.GET.urlencode()は元の要求URIに表示されているのと同じ順序でキーを返さないことに注意することが重要です。 – Aaron

    +1

    これは実際には辞書の基本です。さらに、ほとんどのクエリ文字列は、キー入力されている場合は順序付けられていないとみなされます。真のリストであれば、それは注文されます。 – uchuugaka

    50

    第三の選択肢:Pythonで

    >>> 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']} 
    

    3+、これはとして提供されています:

    from urllib.parse import parse_qs 
    

    Documentation for urllib.parse

    +6

    なぜ、クエリ文字列が必要なのか、処理されないのかよく分かりませんが、urlparseを使用するのが最も読みやすく分かりやすい方法です。 –

    +0

    これは本当に私を助けました - 私は、リクエストURLからparamsを持っていたMap(または何らかのオブジェクト)が必要でした! –

    関連する問題