2010-07-24 1 views
15

로부터 다치 키의 모든 값을 구하는 방법 장고 문서라고 QueryDict.iteritems() 키가 하나 개 이상의 값을 가지면 것을 의미 QueryDict.__getitem__() 같은 최종 치 논리를 사용 http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.QueryDict.iteritems에서, __getitem__()은 마지막 값을 반환합니다.장고 request.GET QueryDict

의이 print request.GET가 다음과 같다고 가정 해 보겠습니다

<QueryDict: {u'sex': [u'1'], u'status': [u'1', u'2', u'3', u'4']}>

내가 sex=1&status=1&status=2&status=3&status=4 같은 문자열을 얻고 싶다면 (표준 HTTP GET 물건) 때문에 iteritems 행동의 원하는 결과를 제공하지 않습니다 다음 코드

너무 많은 루핑없이 원하는 결과를 얻는 가장 효율적인 방법은 무엇입니까?

감사합니다.

[편집]

내가 문자열에 싶지 않아 request.GET에서 일부 키가 있기 때문에 내가 QueryDict.urlencode()에 의존하지 오전 언급해야한다. 나는 문자열을 변경하고 키 = 값을 꺼낼 수 있지만 이것에 대해 더 좋은 방법이 있는지 궁금해하고 있습니다. 이 정보가 명시 적으로 언급되어 있어야한다는 것을 알았습니다.

답변

11

에게 작동해야 함 :

mstring = [] 
for key in request.GET.iterkeys(): # "for key in request.GET" works too. 
    # Add filtering logic here. 
    valuelist = request.GET.getlist(key) 
    mstring.extend(['%s=%s' % (key, val) for val in valuelist]) 
print '&'.join(mstring) 
+0

Perfect. 감사. – chefsmart

+0

'request.GET.iterlists()'가 있습니다. 또한 아래의 David의 답변에 의한 접근 방식이 더 깨끗하다고 ​​생각합니다. – Ski

+0

@ 스 키 : 동의했다. 그래서 나는 그것을 upvoted :-) 당신이 인코딩하기 전에 키의 하위 집합을 필터링하려는 경우 여전히 도움이되지 않습니다. – elo80ka

8

나는 당신이 원하는 모든 인쇄 후 바로

print request.GET.urlencode() 

트릭을 할해야 QueryDict을 경우 QueryDict.urlencode이 원하는 결과를 달성 생각합니다. 네가 뭔가 다른 것을 시도하고 있다면 내가 도와 주겠다고 알려주지!

+0

네, 그 일을합니다. 하지만 원래 게시물에서 언급하지 않은 것은 (요청해야하는) 요청에 일부 키가 있다는 것입니다. 문자열에 삽입하지 않으려 고합니다. 나는 문자열을 검색하여 꺼낼 수 있지만 다른 방법이 있는지 궁금해합니다. 나는 내 질문을 편집하고 다시 말로 표현할 것이다. – chefsmart

+3

'data = request.GET.copy()'를 호출하고 필요없는 데이터를 제거한 다음'data.urlencode()'를 실행하십시오. – Ski

20
request.META['QUERY_STRING'] 

전체 쿼리 문자열

또는 주어진 키 전 값의 목록을 얻으려면 줄 것이다 : 값 목록을 상태를 다음

request.GET.getlist('status') 
+3

도 POST에서 작동합니다. -'request.POST.getlist ('foo')' – northben

5
request.GET.getlist('status') 
0

당신은 사전에 querydict를 캐스팅 할 수 있습니다.

 
map(int,dict(request.GET)["status"])