В представлении Django вы можете получить доступ к request.GET['variablename']
, поэтому, по вашему мнению, вы можете сделать что-то вроде этого:
myvar = request.GET['myvar']
Фактический тип объекта request.GET['myvar']
:
<class 'django.http.QueryDict'>
Теперь, если вы хотите передать несколько переменных с одним и тем же именем параметра, то есть:
http://example.com/blah/?myvar=123&myvar=567
Вы хотите вернуть list
python для параметра myvar
, а затем сделать что-то вроде этого:
for var in request.GET['myvar']:
print(var)
Однако при попытке получить только последнее значение, переданное в URL, т.е. в приведенном выше примере вы получите 567, и результат в оболочке будет:
5
6
7
Однако, когда вы печатаете request.GET
кажется, что у него есть list
т.е.
<QueryDict: {u'myvar': [u'123', u'567']}>
Ok Update: он предназначен для возврата последнего значения, мой вариант использования мне нужен список.
из Django документов:
QueryDict. getitem (key) Возвращает значение для данного ключа. Если ключ имеет более одного значения, getitem() возвращает последнее значение. Вызывает django.utils.datastructures.MultiValueDictKeyError, если ключ не существует. (Это подкласс Python стандартного KeyError, поэтому вы можете придерживаться перехвата KeyError
QueryDict.getlist(key) Возвращает данные с запрошенным ключом в виде списка Python. Возвращает пустой список, если ключ не существует. Он гарантированно вернет какой-то список.
Обновление: если кто-то знает, почему django dev сделал это, пожалуйста, дайте мне знать, кажется, что показывать список нелогично, и он не ведет себя как один. Не очень питонично!