Обработка запроса Django.Получить и несколько переменных для одного и того же имени параметра


в представлении django и т. д. вы можете получить доступ к запрос.Сделать['имя_переменной'], так что на ваш взгляд можно вернуть сделать что-то вроде этого:

myvar = request.GET['myvar']

фактический запрос.GET ['myvar'] тип объекта:

<class 'django.http.QueryDict'>

теперь, если вы хотите передать несколько переменных с тем же именем параметра т. е.

http://example.com/blah/?myvar=123&myvar=567

другими словами, вы хотели бы python список возвращается для параметра myvar

по сути то, что я хочу сделать, это что-то вроде этого

 for var in request.GET['myvar']:
     print var

однако, когда вы пытаетесь, что вы получаете только последнее значение, переданное в url-адрес т. е. в примере выше вы получите 567

и результат в оболочке будет:

5
6
7

однако, когда вы делаете печать запроса.Получить кажется, что у него есть список, т. е.:

<QueryDict: {u'myvar': [u'123', u'567']}>

Ok Обновление: Он предназначен для верните последнее значение, мой вариант использования - мне нужен список.

из django docs:

QueryDict.getitem(клавиша) Возвращается значение для данного ключа. Если ключ имеет более одного значения, getitem() возвращает последнее значение. Повышения Джанго.utils.структуры данных.MultiValueDictKeyError если ключ не существует. (Это подкласс в Python стандартной KeyError, так что вы можете придерживаться ловить KeyError

QueryDict.getlist (ключ) возвращает данные с запрошенным ключом, как a Список Python. Возвращает пустой список, если ключа не существует. Это гарантировано чтобы вернуть какой-то список.

обновление: Если кто-нибудь знает, почему django dev сделали это, пожалуйста, дайте мне знать, кажется, что это противоречит интуиции, чтобы показать список, и он не ведет себя как один. Не очень подходящие для Python!

2 53

2 ответа:

вы хотите getlist () функция объекта GET:

request.GET.getlist('myvar')

другим решением является создание копии объекта запроса... Как правило, вы не можете перебирать запрос.Получить или запросить.Пост объекта, но вы можете делать такие операции на копии:

res_set = request.GET.copy()
for item in res_set['myvar']:
    item
...