В представлении 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']}>
Хорошо, обновление: он предназначен для возврата последнего значения, мой вариант использования - мне нужен список.
из django docs:
QueryDict. getitem (key) Возвращает значение для данного ключа. Если ключ имеет более одного значения, getitem () возвращает последнее значение. Вызывает ошибку django.utils.datastructures.MultiValueDictKeyError, если ключ не существует. (Это подкласс стандартного Python KeyError, поэтому вы можете придерживаться перехвата KeyError
QueryDict.getlist (key) Возвращает данные с запрошенным ключом в виде списка Python. Возвращает пустой список, если ключ не существует. Гарантированно вернет какой-то список.
Обновление: если кто-то знает, почему разработчики django сделали это, дайте мне знать, кажется нелогичным отображать список, и он не ведет себя как один. Не очень питонический!