web-dev-qa-db-ja.com

URLからパラメーターを取得する

次のようなURLが与えられた場合、クエリパラメータの値を解析するにはどうすればよいですか?たとえば、この場合、defの値が必要です。

/abc?def='ghi'

私の環境ではDjangoを使用しています。 requestオブジェクトに役立つメソッドがありますか?

self.request.get('def')を使用しようとしましたが、期待したように値ghiを返していません。

137
niteshb

Python 2:

import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']

Python 3:

import urllib.parse as urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print(urlparse.parse_qs(parsed.query)['def'])
212
systempuntoout
import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)

print par['q'][0], par['p'][0]
52
Cris

私はこの解決策がまだここにないことにショックを受けています。つかいます:

request.GET.get('variable_name')

これは、「GET」辞書から変数を「取得」し、存在する場合は「variable_name」値を返し、存在しない場合はNoneオブジェクトを返します。

44
jball037

Python> 3.4の場合

from urllib import parse
url = 'http://foo.appspot.com/abc?def=ghi'
query_def=parse.parse_qs(parse.urlparse(url).query)['def'][0]
34
Anatoly E

私はこれが少し遅いことを知っていますが、今日ここにいることに気付いたので、これは他の人にとって役に立つ答えかもしれないと思いました。

import urlparse
url = 'http://example.com/?q=abc&p=123'
parsed = urlparse.urlparse(url)
params = urlparse.parse_qsl(parsed.query)
for x,y in params:
    print "Parameter = "+x,"Value = "+y

Parse_qsl()では、「データは名前と値のペアのリストとして返されます。」

17
iCanHasFay

Furlと呼ばれる新しいライブラリがあります。このライブラリは、URL代数を行うのに最もPythonicであることがわかりました。インストールするには:

pip install furl

コード:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']
17
Mayank Jaiswal

あなたが参照しているURLはクエリタイプであり、リクエストオブジェクトは arguments と呼ばれるメソッドをサポートしてクエリ引数を取得していることがわかります。また、self.request.get('def')を直接試して、オブジェクトから値を取得することもできます。

5
Senthil Kumaran

純粋なPythonの場合:

def get_param_from_url(url, param_name):
    return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0]
3
Asym

Urlparseモジュールは必要なものすべてを提供します:

urlparse.parse_qs()

3
Andreas Jung

そのいずれかを行う必要はありません。とのみ

self.request.get('variable_name')

メソッド(GET、POSTなど)を指定していないことに注意してください。これは 十分に文書化されている および これは例です

Djangoテンプレートを使用するという事実は、ハンドラーがDjangoによっても処理されることを意味しません

3
chachan
def getParams(url):
    params = url.split("?")[1]
    params = params.split('=')
    pairs = Zip(params[0::2], params[1::2])
    answer = dict((k,v) for k,v in pairs)

お役に立てれば

3
inspectorG4dget
import cgitb
cgitb.enable()

import cgi
print "Content-Type: text/plain;charset=utf-8"
print
form = cgi.FieldStorage()
i = int(form.getvalue('a'))+int(form.getvalue('b'))
print i
2
George

Niceライブラリw3lib.urlがあります

from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi
1
Corvax

ところで、私はparse_qs()を使用して空の値パラメータを取得する際に問題があり、値を含まないクエリ文字列のパラメータのリストを返すために2番目のオプションパラメータ「keep_blank_values」を渡す必要があることを学びました。デフォルトはfalseです。一部のくだらない記述されたAPIには、値が含まれていない場合でもパラメーターが存在する必要があります

for k,v in urlparse.parse_qs(p.query, True).items():
  print k
0
sciweb