2013-08-11 4 views
1

Ниже приведен результат печати словаря, который я создаю с данными из db. Я пытаюсь показать его в html с порядком даты по возрастанию. Но когда я цикл в шаблоне, порядок неправильный? Я искал и попробовал orderdict, создал специальный фильтр ->Django, python Сортировка вложенного словаря по дате ключа

@register.filter(name='sort') 
def listsort(value): 
     if isinstance(value, dict): 
      new_dict = SortedDict() 
      key_list = value.keys() 
      key_list.sort() 
      for key in key_list: 
       new_dict[key] = value[key] 
      return new_dict 
     elif isinstance(value, list): 
      new_list = list(value) 
      new_list.sort() 
      return new_list 
     else: 
      return value 
     listsort.is_safe = True 

Не повезло! Ниже приведен словарь, который у меня есть:

{u'Berplatform': {'days': {datetime.date(2012, 10, 31): {'': None}, 
          datetime.date(2012, 11, 9): {<Event: Opening Coctail>: <Event: Opening Coctail>, 
                  '': None}, 
          datetime.date(2012, 11, 10): {'': None}, 
          datetime.date(2012, 11, 11): {'': None}, 
          datetime.date(2012, 11, 13): {'': None}, 
          datetime.date(2012, 11, 17): {'': None}, 
          datetime.date(2012, 11, 18): {'': None}, 
          datetime.date(2012, 11, 24): {<Event: Platform is in Art İstanbul>: <Event: amberPlatform is in Art İstanbul>, 
                  '': None}, 
          datetime.date(2013, 7, 2): {<Event: ber12 exhibition 2>: <Event: amber12 exhibition 2>, 
                 '': None}}}, 
+0

Почему просто не заказать его в QuerySet? –

+0

Я заказываю в queryset, делая order_by ('begin_date') ... Как вы можете видеть, в печатном dict нет проблемы, но в шаблоне цикл неправильный. – ratata

+0

Итак, как выглядит ваш шаблонный цикл? –

ответ

0

Пользовательский тег шаблона был решением, но я использовал его неправильно в шаблоне. Ниже приведено использование.

Пользовательский шаблон тег:

@register.filter(name='sort') 
def listsort(value): 
     if isinstance(value, dict): 
      new_dict = SortedDict() 
      key_list = value.keys() 
      key_list.sort() 
      for key in key_list: 
       new_dict[key] = value[key] 
      return new_dict 
     elif isinstance(value, list): 
      new_list = list(value) 
      new_list.sort() 
      return new_list 
     else: 
      return value 
     listsort.is_safe = True 

Правильное использование в шаблоне:

{% for venue, days in program.items %} 
<div style='float:left; clear:both;'> 
    <div class='boxRedBottom' style='width:100px;'> 
     {{ venue }} 
    </div> 
    {% for key, values in days.items %} 
     {% for key, events in values.items|sort %} # Do the sorting of nested dict 
      {% for event in events %} 
       <div style='float:left; width:100px; border:1px solid gray;'> 
       {{ event }} {{ event.beginning_date }} 
       </div> 
      {% endfor %}  
     {% endfor %}  
    {% endfor %} 
</div> 
{% endfor %} 
Смежные вопросы