왠만한 웹 개발 편의사항들이 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: 폼요소에 같은 이름 여러번 사용하기 무려 , 10년전에!
Suggested Pages #
- 0.025 July 21
- 0.025 Hyungyong Kim
- 0.025 Salsa
- 0.025 Web framework
- 0.025
- 0.013 July 10
- 0.013 Tennis
- 0.013 Computer vision
- 0.013 Hyungyong Kim/rsa.pub
- 0.013 Digital healthcare
- More suggestions...
Other Posts #
- newer 구글 앱 엔진에서 Ecogwiki 과도한 과금 문제 해결
- older 11월 12일 광화문 촛불집회 다녀오다