4

これを django-users グループ ( http://groups.google.com/group/django-users/browse_thread/thread/8572d7f4075cfe0e ) に投稿しようとしましたが、応答がありませんでした。多分ここで私はより多くの助けを得るでしょう。

セッションに保存request.GETします:

request.session['query_string'] = request.GET

次に、別のページで値を取得し、QueryDict を urlencode しようとします。

context['query_string'] = request.session['query_string'].urlencode()

私のコンテキストでは、予想される文字列ではなく、Python の QueryDict オブジェクトの文字列表現を取得しkey0=value0&key1=value1&... ます。

QueryDict の代わりに、urlencode された文字列をセッションに保存すると、もちろんすべてが機能します。

request.session['query_string'] = request.GET.urlencode()

バグですか?

4

2 に答える 2

-1

これはバグではありません。QueryDict定義をのぞいてみると( https://github.com/django/django/blob/master/django/http/init.pyを参照)、コピーを作成しない限り不変であることが明示されています。

これを実証するために、Python シェルにあるものを次に示します。

>>> from django.http import QueryDict
>>> q1 = QueryDict('', mutable=False)
>>> q2 = QueryDict('', mutable=True)
>>> q1['next'] = '/a&b/'
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/kenny/Desktop/Kreybits/locker/python/lib/python2.7/site-packages/django/http/__init__.py", line 357, in __setitem__
    self._assert_mutable()
  File "/Users/kenny/Desktop/Kreybits/locker/python/lib/python2.7/site-packages/django/http/__init__.py", line 354, in _assert_mutable
    raise AttributeError("This QueryDict instance is immutable")
AttributeError: This QueryDict instance is immutable
>>> q2['next'] = '/a&b/'
>>> q2.urlencode()
'next=%2Fa%26b%2F'

mutable引数はデフォルトで False に設定されており、最初は空の QueryDict に初期化されているため、適切なキー/値で初期化された QueryDict を操作しているためrequest.session['query_string'] = request.GET、呼び出しurlencode()は空の str のみを返します。request.session['query_string'] = request.GET.urlencode()

于 2011-08-15T17:45:06.433 に答える