2011-08-15 2 views
4

장고 사용자 그룹 (http://groups.google.com/group/django-users/browse_thread/thread/8572d7f4075cfe0e)에게 게시하려고했지만 응답이 없습니다. 어쩌면 여기에서 나는 더 많은 도움을 얻을 것이다.는 QueryDict를 세션에 저장 한 후에 urlencode()를 수행 할 수 없습니다.

나는 세션에서 request.GET를 저장 :

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

가 나는 다른 페이지에서 값을 검색하고 QueryDict를 urlencode하려고 : 나는의 파이썬의 문자열 표현을 얻을 내 상황에서

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

key0=value0&key1=value1&... 문자열 대신 QueryDict 개체.

경우, 대신 QueryDict, 나는 물론 모든 작품의 세션에서 urlencode되고 문자열을 저장 : 그것은 버그

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

입니까?

답변

0

이것은 버그가 아닙니다. QueryDict 정의 (https://github.com/django/django/blob/master/django/http/init.py 참고)를 들여다 보면, 복사본을 만들지 않는 한 변경되지 않는다는 것이 명시되어 있습니다.

>>> 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로 설정하고, request.session['query_string'] = request.GET부터 시작하는 빈 QueryDict에 초기화, 여기에 내가 내 파이썬 쉘에있는 무슨이를 보여에만 urlencode()를 호출하려면 적절한 키/값으로 초기화 된 QueryDict로 작업 중이므로 request.session['query_string'] = request.GET.urlencode()이 작동하는 동안 빈 str을 반환합니다.

+0

감사합니다. urlencode()는 세션에서 가져온 객체에 대해 호출 될 때 빈 문자열을 반환하지 않고 'param0 = a & param1 = b'를 기대할 때, 제 생각에 그것이 불변이라는 것과 관련이 없다고 생각합니다. – akonsu

관련 문제