2012-07-01 74 views
19

我有這個url = https://stackoverflow.com/questions/ask?next=1&value=3 現在我需要從這個URL獲取查詢字符串。 我不想使用request.META獲取查詢字符串。我如何過想通了,有兩個方法得到的查詢字符串從python中的URL獲取查詢字符串的最佳方式?

  1. 使用裏urlparse使用 urlparse.urlparse(URL).query行動組也

  2. 使用URL編碼 使用進行urlencode並通過PARAMS request.GET中詞典到它,得到它的字符串表示....

那麼更好地得到查詢字符串......? 我的一些同事說urlencode是好多了,但我沒有滿意wid那裏的答案到目前爲止......就像他們提到urlparse在內部調用urlencode ..即使在這一點上,我懷疑,因爲我認爲urlparse和urlencode是完全independent.as urlencode在urllib模塊....請澄清這件事。

回答

38

您可以使用這樣

request.GET.urlencode() 
GET參數使查詢字符串

這不包括前綴?,它可能不會以與原始請求中相同的順序返回鍵。

+7

請注意,由於QueryDict包裝無序的字典,因此request.GET.urlencode()可能不會按照它們在原始請求URI中出現的順序返回鍵。 – Aaron

+1

這實際上是詞典的基礎。此外,大多數查詢字符串在鍵入時應被視爲無序。如果它是一個真正的列表,它將被命令。 – uchuugaka

50

第三種選擇:

>>> 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 

Documentation for urllib.parse

+6

好吧,不太清楚爲什麼你想要查詢字符串,並沒有處理它,但使用urlparse是最可讀和可理解的方式。 –

+0

這真的幫助了我 - 我需要一個包含請求URL中的參數的Map(或某個對象)! –

相關問題