1. ホーム
  2. django

[解決済み] Django で、同じパラメータに複数の変数を持つ request.GET を扱うにはどうしたらいいでしょうか?

2023-04-27 03:19:03

質問

Django のビューで request.GET['variablename'] にアクセスできるので、ビューでは次のようなことができます。

myvar = request.GET['myvar']

実際の request.GET['myvar'] オブジェクトの型は

<class 'django.http.QueryDict'>

さて、同じパラメータ名で複数の変数を渡したい場合、すなわち

http://example.com/blah/?myvar=123&myvar=567

あなたはパイソンが好きです list に対して返されるパラメータ myvar を返したら、次のような処理をします。

for var in request.GET['myvar']:
    print(var)

しかし、これを試すと、URL で渡された最後の値しか得られません。つまり、上記の例では、次のようになります。 567 となり、シェルの結果はこうなります。

5
6
7

しかし request.GET を持つようです。 list すなわち

<QueryDict: {u'myvar': [u'123', u'567']}>


OK 更新しました。 これは最後の値を返すように設計されていますが、私のユースケースはリストが必要です。

を django のドキュメントから引用しました。

クエリディクトです。 getitem (キー) を返す。 与えられたキーの値。もし が複数の値を持っている場合は getitem () は最後の値を返します。発生するエラー django.utils.datastructures.MultiValueDictKeyError を発生させます。 を発生させます。(これは のサブクラスです。 KeyError のサブクラスです。 KeyError

QueryDict.getlist(key) リクエストされたキーを持つデータを 要求されたキーを持つデータを Pythonのリストです。キーが存在しない場合は、空のリストを返します。 を返します。何らかのリストを返すことが保証されています。 は何らかのリストを返すことが保証されています。

更新しました。 リストを表示するのは直感に反しているようで、そのように動作しません。Pythonic っぽくない!

どのように解決するのですか?

あなたは getlist() 関数が必要です。

request.GET.getlist('myvar')