Django보기에서에 액세스 할 수 request.GET['variablename']
있으므로보기에서 다음과 같이 할 수 있습니다.
myvar = request.GET['myvar']
실제 request.GET['myvar']
개체 유형은 다음과 같습니다.
<class 'django.http.QueryDict'>
이제 동일한 매개 변수 이름으로 여러 변수를 전달하려는 경우, 즉 :
http://example.com/blah/?myvar=123&myvar=567
list
매개 변수에 대해 파이썬이 반환 되기를 원 myvar
하고 다음과 같이하십시오.
for var in request.GET['myvar']:
print(var)
그러나, 당신은 얻을 것이다 당신이 위의 예에서 URL, 즉 전달 된 마지막 값을 얻을 때 567 , 쉘의 결과가 될 것입니다 :
5
6
7
그러나 인쇄를 request.GET
할 때 list
ie 가있는 것처럼 보입니다 .
<QueryDict: {u'myvar': [u'123', u'567']}>
Ok 업데이트 : 마지막 값을 반환하도록 설계되었습니다. 사용 사례는 목록이 필요하다는 것입니다.
장고 문서에서 :
QueryDict. getitem (key) 주어진 키의 값을 반환합니다. 키에 둘 이상의 값이있는 경우
getitem ()은 마지막 값을 반환합니다. 키가 존재하지 않으면 django.utils.datastructures.MultiValueDictKeyError를 발생시킵니다. (이것은 Python의 표준 KeyError의 하위 클래스이므로 KeyError 포착에 충실 할 수 있습니다.getlist (key) 요청 된 키가있는 데이터를 Python 목록으로 반환합니다. 키가 없으면 빈 목록을 반환합니다. 일종의 목록을 반환하는 것이 보장됩니다.
업데이트 : 장고 개발자가이 작업을 수행 한 이유를 아는 사람이 있으면 알려주세요. 목록을 표시하는 것은 직관적이지 않으며 목록처럼 작동하지 않습니다. 별로 비단뱀 같지 않습니다!
답변
GET 객체 의 getlist () 함수를 원합니다 .
request.GET.getlist('myvar')
답변
또 다른 해결책은 요청 객체의 복사본을 만드는 것입니다 … 일반적으로 request.GET 또는 request.POST 객체를 반복 할 수는 없지만 복사본에 대해 이러한 작업을 수행 할 수 있습니다.
res_set = request.GET.copy()
for item in res_set['myvar']:
item
...