2011-02-16 9 views
0

月と年ごとに一般的なビューのアーカイブページを作成します。このよう :Django Year/Month一般的なビューを持つアーカイブページ

2011 - January March 
2010 - October December 

私は何を取得しています:

2011 - January January 
2010 - January January 

これは可能ですか?ここには、ビューとテンプレートがあります。

ビュー

def track_archive(request): 
    return date_based.archive_index(
     request, 
     date_field='date', 
     queryset=Track.objects.all(), 
) 
track_archive.__doc__ = date_based.archive_index.__doc__ 

template 
{% for year in date_list %} 
     <a href="{% url track_archive %}{{ year|date:"Y" }}/">{{ year|date:"Y" }}</a> archives: 
     {% for month in date_list %} 
      <a href="{% url track_archive %}{{ year|date:"Y" }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a> 
     {% endfor %} 
    {% endfor %} 

答えて

3

docによると、archive_indexは年を計算します。あなたは年/月のグループ分けを書きたいかもしれません:

def track_archive(request): 
    tracks = Track.objects.all() 
    archive = {} 

    date_field = 'date' 

    years = tracks.dates(date_field, 'year')[::-1] 
    for date_year in years: 
     months = tracks.filter(date__year=date_year.year).dates(date_field, 'month') 
     archive[date_year] = months 

    archive = sorted(archive.items(), reverse=True) 

    return date_based.archive_index(
     request, 
     date_field=date_field, 
     queryset=tracks, 
     extra_context={'archive': archive}, 
    ) 

あなたのテンプレート:

{% for y, months in archive %} 
<div> 
    {{ y.year }} archives: 
    {% for m in months %} 
    {{ m|date:"F" }} 
    {% endfor %} 
</div> 
{% endfor %} 

をyとmは日付オブジェクトである、あなたのURLを作成するために、任意の日付書式情報を抽出することができるはずです。

4

クラスベースのジェネリックビューを使用すると、ジェネリックビューを使用することができます。

代わりのArchiveIndexView 使用に

class IndexView(ArchiveIndexView): 
    template_name="index.html" 
    model = Article 
    date_field="created" 

    def get_context_data(self, **kwargs): 
     context = super(IndexView,self).get_context_data(**kwargs) 
     months = Article.objects.dates('created','month')[::-1] 

     context['months'] = months 
     return context 

のようなものを使用して次に、あなたのテンプレートで、あなたは数ヶ月の辞書を取得し、年によってそのことができますグループ::

<ul> 
    {% for year, months in years.items %} 
    <li> <a href ="{% url archive_year year %}"> {{ year }} <ul> 
     {% for month in months %} 
      <li> <a href ="{% url archive_month year month.month %}/">{{ month|date:"M Y" }}</a> </li> 
     {% endfor %} 
     </ul> 
    </li> 
    {% endfor %} 
</ul> 
関連する問題