2016-03-27 3 views
1

日付...Djangoのテンプレートは、年のネストされたリストを表示し、私は私の見解では、次のコードを持って

日付の次のリストを生成
dates = Article.objects.dates('date', 'month').order_by('-date') 

...

[ 
    datetime.date(2016, 3, 1), datetime.date(2016, 1, 1), 
    datetime.date(2016, 1, 1), datetime.date(2015, 2, 1), 
    datetime.date(2015, 2, 1), datetime.date(2015, 1, 1), 
    datetime.date(2015, 1, 1) 
] 

私は私は「changeif」または「再グループ化」を使用して苦しんでいます

 <ul class="news-selector"> 
      <li><a href="todo">Year</a> 
       <ul> 
        <li><a href="todo">Month</a></li> 
       </ul> 
      </li> 
     </ul> 

...次のマークアップを使用して、ネストされたリストを作成する必要があることはありませんyoneは、これを管理する方法を知っていますdjangoテンプレートシステムを使用して?

答えて

0

これは、私がその今それを見るリストにあなたの

<ul class="news-selector"> 
    {% for y in dates %} 
    {% ifchanged y.year %} 
     <li><a href="todo">{{y|date:'Y'}}</a> 
     <ul> 
      {% for m in dates %} 
      {% if m|date:'Y' == y|date:'Y' %} 
       <li><a href="todo">{{ m|date:'M' }}</a></li> 
      {% endif %} 
      {% endfor %} 
     </ul> 
     </li> 
    {% endifchanged %} 
    {% endfor %} 
</ul> 
0

を与えるだろう{%がMの場合|日付: 'Y' == yを|日付: 'Y' %}行、私が管理していますより少ないループでそれを行うには、ビュー内のデータを少し上手く準備します。

date_list = Article.objects.dates('date', 'month', order='DESC') 

dates = [] 
for date in date_list: 
    dates.append({ 
     'year': str(date.year).rjust(4, '0'), 
     'month': str(date.month).rjust(2, '0'), 
     'month_name': date.strftime("%B") 
    }) 

、テンプレートで...

  {% regroup dates by year as year_dates %} 

      <ul class="news-selector"> 
      {% for year in year_dates %} 
       <li><a href="todo">{{year.grouper}}</a> 
        <ul> 
        {% for month in year.list %} 
         <li><a href="{% url 'news_filter' month.year month.month %}">{{month.month_name}}</a></li> 
        {% endfor %} 
        </ul> 
       </li> 
       {% endfor %} 
      </ul> 

が動作しているようですが、おそらく大幅に改善することができます。

関連する問題