Skip to content

Posts 장고(Django) QueryDict 사용 주의 #
Find similar titles

왠만한 웹 개발 편의사항들이 Django에 잘 정리되어 있어 좋긴하나, 가끔 예상치 않은 동작을 할 때가 있다. 오늘 QueryDict 때문에 한동안 삽질.

#!python
>>> from django.http import QueryDict
>>> qd = QueryDict('a=1&a=2&c=3')
>>> qd
<QueryDict: {'a': ['1', '2'], 'c': ['3']}>

웹 요청에서 받은 변수들 "a=1&a=2&c=3" 을 파이썬 딕셔너리로 쓸 수 있고, 같은 변수가 여러번 쓰이면 리스트로 담게 된다. 여기서 'a' 변수의 모든 값을 가져오려면, getlist 메쏘드를 써야 한다.

#!python
>>> qd['a']
'2'
>>> qd.getlist('a')
['1', '2']
>>>

이 녀석을 그냥 루프를 돌리면, 매번 마지막 값만 사용한다.

#!python
>>> list(qd.items())
[('a', '2'), ('c', '3')]
>>> for each in qd:
...     print(each, qd[each])
...
a 2
c 3

따라서, 복수개 값이 있는 경우, 주의하여 써야 한다. 이 녀석에게 값을 추가한다던가 할 때, 그냥 루프를 쓰면 마지막 값만 남기 때문이다. 다행히 urlencode 메쏘드에는 여러개 값이 그대로 있다.

#!python
>>> qd.urlencode()
'a=1&a=2&c=3'
>>>

여기까지 오늘의 삽질 기록.

P.S. 비슷한 문제를 예전에 포스팅한적이 있었다. Django newforms tip: 폼요소에 같은 이름 여러번 사용하기 무려 2008-03-19, 10년전에!

Suggested Pages #

Other Posts #

comments powered by Disqus
web biohackers.net
0.0.1_20140628_0