2014-10-21 2 views
0

Я пытаюсь запустить словарь POST, но по какой-то причине, когда я запускаю свой код с помощью python 3.4 вместо python 2.7, я запускаю ошибку 'QueryDict' object has no attribute 'iterkeys'. Вот код, я бегу:Python 3.4 Объект Django 'QueryDict' не имеет атрибута 'iterkeys'

def printKeys(request): 
    for a in sorted(request.POST.iterkeys()): 
     print(a) 
+0

Если ответ помог, вам следует подумать о том, чтобы дать любовь! – bgusach

ответ

7

Я предполагаю, что QueryDict является подклассом встроенного dict. Словари не имеют .iterkeys (ни .itervalues, ни .iteritems) на python 3.x. Методы .keys, .values, .items возвращают непосредственно итерируемый вид базового словаря, а не строят (возможно) дорогие списки.

Если вы хотите построить список из них, вы должны сделать это явно:

keys = list(request.POST.keys()) 

или более лаконично, вы можете просто передать Dict в list, так как словари итерацию по умолчанию на ключи.

keys = list(request.POST) 

Однако, вы можете позвонить сортируется непосредственно на итератора, так что это просто отлично:

sorted_keys = sorted(request.POST) 

Ваша функция может быть переписана в виде:

def print_keys(request): 
    print('\n'.join(sorted(request.POST))) 

И это должно работать на оба python 2.7 и 3.4.

 Смежные вопросы

  • Нет связанных вопросов^_^