Как отобразить упорядоченный словарь в шаблонах django?

Я пытаюсь изучить шаблоны django, но это непросто.
У меня есть определенный view.py содержащий словарь для визуализации с помощью шаблона. Словарь состоит из пар ключ-значение, где ключ – это уникальные имена, а значения – некоторые значения, связанные с этими именами. Я переводю словарь следующим образом:

return render_to_response('results.html', {'data': results_dict}) 

Теперь моя проблема заключается в том, что в моем шаблоне мне нужно отображать имена в алфавитном (или ASCII-бифессиональном) порядке со значениями родственников.
На самом деле в моем шаблоне я:

 <table> {% for key, value in data.items %} <tr> <td> {{ key }}: </td> <td> {{ value }} </td> </tr> </table> 

Как я могу отображать данные отсортированным способом? Большое спасибо.

4 Solutions collect form web for “Как отобразить упорядоченный словарь в шаблонах django?”

В views.py (Python2):

 return render_to_response('results.html', {'data': sorted(results_dict.iteritems())}) 

Или в views.py (Python3):

 return render_to_response('results.html', {'data': sorted(results_dict.items())}) 

В файле шаблона:

 {% for key, value in data %} <tr> <td> {{ key }}: </td> <td> {{ value }} </td> </tr> {% endfor %} 

Другое решение, которое очень хорошо работало для меня, и я думаю, что это проще. Он использует OrderedDict() подробнее

В файле views.py добавьте:

 from collections import OrderedDict def main(request): ord_dict = OrderedDict() ord_dict['2015-06-20'] = {} ord_dict['2015-06-20']['a'] = '1' ord_dict['2015-06-20']['b'] = '2' ord_dict['2015-06-21'] = {} ord_dict['2015-06-21']['a'] = '10' ord_dict['2015-06-21']['b'] = '20' return render(request, 'main.html', {'context': ord_dict}) 

Затем в вашем шаблоне вы можете:

 <table> {% for key, value in context.items %} <tr> <td>{{ key }}</td> <td>{{ value.a }}</td> <td>{{ value.b }} </td> </tr> {% endfor %} </table> 

Это вернет ключи словаря в том же порядке, что и в них.

 2015-06-20 1 2 2015-06-21 10 20 

Обновление старого вопроса, но это было то, что я потратил некоторое время на программирование noobie. Он расширяет ответ Юджи Томита.

Как сортировать словарь, который выглядит так:

 {model_A_object: {key: value, ...},...} 

по модели_A_object.field.

Я заполняю его циклом for и использую его для хранения некоторой агрегации и т. Д. Данных для набора запросов, которые я передаю в шаблон.

Мне удалось это сделать (с Shubuntu из справки #Django):

  result = sorted(dictionary.iteritems(), key= lambda (k, v) : (k.field, v)) 

Затем в шаблоне:

  {% for model_A_object, data in result %} {% for key, value in data.items %} ... {% endfor %} {% endfor %} 

Чистый и легкий, но не такой простой для новичка. Обратите внимание, что первый для цикла результат не result.items, поскольку он больше не словарь, а список кортежей.

Надеюсь, это поможет кому-то.

Хотя изменение кода в представлении предпочтительнее, вы также можете использовать тег шаблона dictsort:

https://docs.djangoproject.com/es/1.9/ref/templates/builtins/#std:templatefilter-dictsort

 <table> {% for key, value in data.items|dictsort:"0.lower" %} <tr> <td> {{ key }}: </td> <td> {{ value }} </td> </tr> </table> 
  • Шаблоны django: включают и расширяют
  • как добавить тег <div> вместо <li>
  • JS перестает работать с дочерним шаблоном, когда я выполняю вызов AJAX для изменения набора запросов
  • Django динамически получает URL-адрес просмотра и проверяет, является ли его текущая страница
  • Шаблон Django не найден
  • Форматы данных Python в js datastructures с использованием шаблонов Django (списки и dicts)
  • Отношение внешнего ключа Django в шаблоне
  • Проверка наличия в элементах переменной списка в шаблоне Django
  • Python - лучший язык программирования в мире.