一般的な日付ビュー—Djangoドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/ref/class-based-views/generic-date-based
移動先:案内検索

一般的な日付ビュー

django.views.generic.dates で提供される日付ベースの汎用ビューは、日付ベースのデータのドリルダウンページを表示するためのビューです。

ノート

このページのいくつかの例は、Articleモデルがmyapp/models.pyで次のように定義されていることを前提としています。

from django.db import models
from django.urls import reverse

class Article(models.Model):
    title = models.CharField(max_length=200)
    pub_date = models.DateField()

    def get_absolute_url(self):
        return reverse('article-detail', kwargs={'pk': self.pk})

ArchiveIndexView

class ArchiveIndexView

「最新の」オブジェクトを日付別に表示するトップレベルのインデックスページ。 allow_futureTrueに設定しない限り、 future に日付があるオブジェクトは含まれません。

祖先(MRO)

環境

django.views.generic.list.MultipleObjectMixindjango.views.generic.dates.BaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。

  • date_listdatetime.datetimeオブジェクトとして表される、querysetに従って使用可能なオブジェクトが降順である、すべての年を含む QuerySet オブジェクト。

ノート

  • latestのデフォルトのcontext_object_nameを使用します。

  • _archiveのデフォルトのtemplate_name_suffixを使用します。

  • デフォルトでは年ごとにdate_listを提供しますが、これは属性date_list_periodを使用して月または日に変更できます。 これは、すべてのサブクラスビューにも当てはまります。

例myapp / urls.py

from django.urls import path
from django.views.generic.dates import ArchiveIndexView

from myapp.models import Article

urlpatterns = [
    path('archive/',
         ArchiveIndexView.as_view(model=Article, date_field="pub_date"),
         name="article_archive"),
]

例myapp / article_archive.html

<ul>
    {% for article in latest %}
        <li>{{ article.pub_date }}: {{ article.title }}</li>
    {% endfor %}
</ul>

これにより、すべての記事が出力されます。


YearArchiveView

class YearArchiveView

特定の年に利用可能なすべての月を表示する年次アーカイブページ。 allow_futureTrueに設定しない限り、 future に日付が含まれるオブジェクトは表示されません。

祖先(MRO)

make_object_list

今年のオブジェクトの完全なリストを取得してテンプレートに渡すかどうかを指定するブール値。 Trueの場合、オブジェクトのリストがコンテキストで使用できるようになります。 Falseの場合、Noneクエリセットがオブジェクトリストとして使用されます。 デフォルトでは、これはFalseです。

get_make_object_list()

オブジェクトリストがコンテキストの一部として返されるかどうかを決定します。 デフォルトで make_object_list を返します。

環境

django.views.generic.list.MultipleObjectMixindjango.views.generic.dates.BaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。

  • date_listdatetime.datetimeオブジェクトとして表される昇順でquerysetに従って使用可能なオブジェクトを持つすべての月を含む QuerySet オブジェクト。

  • year:指定された年を表すdateオブジェクト。

  • next_yearallow_empty および allow_future に従って、翌年の初日を表すdateオブジェクト。

  • previous_yearallow_empty および allow_future に従って、前年の初日を表すdateオブジェクト。

ノート

  • _archive_yearのデフォルトのtemplate_name_suffixを使用します。

例myapp / views.py

from django.views.generic.dates import YearArchiveView

from myapp.models import Article

class ArticleYearArchiveView(YearArchiveView):
    queryset = Article.objects.all()
    date_field = "pub_date"
    make_object_list = True
    allow_future = True

例myapp / urls.py

from django.urls import path

from myapp.views import ArticleYearArchiveView

urlpatterns = [
    path('<int:year>/',
         ArticleYearArchiveView.as_view(),
         name="article_year_archive"),
]

例myapp / article_archive_year.html

<ul>
    {% for date in date_list %}
        <li>{{ date|date }}</li>
    {% endfor %}
</ul>

<div>
    <h1>All Articles for {{ year|date:"Y" }}</h1>
    {% for obj in object_list %}
        <p>
            {{ obj.title }} - {{ obj.pub_date|date:"F j, Y" }}
        </p>
    {% endfor %}
</div>


MonthArchiveView

class MonthArchiveView

特定の月のすべてのオブジェクトを表示する月次アーカイブページ。 allow_futureTrueに設定しない限り、 future に日付が含まれるオブジェクトは表示されません。

祖先(MRO)

環境

MultipleObjectMixinBaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。

  • date_listquerysetに従って、指定された月にオブジェクトが使用可能なすべての日を含む QuerySet オブジェクト。昇順で、datetime.datetimeオブジェクトとして表されます。 。

  • month:指定された月を表すdateオブジェクト。

  • next_monthallow_empty および allow_future に従って、翌月の初日を表すdateオブジェクト。

  • previous_monthallow_empty および allow_future に従って、前月の初日を表すdateオブジェクト。

ノート

  • _archive_monthのデフォルトのtemplate_name_suffixを使用します。

例myapp / views.py

from django.views.generic.dates import MonthArchiveView

from myapp.models import Article

class ArticleMonthArchiveView(MonthArchiveView):
    queryset = Article.objects.all()
    date_field = "pub_date"
    allow_future = True

例myapp / urls.py

from django.urls import path

from myapp.views import ArticleMonthArchiveView

urlpatterns = [
    # Example: /2012/08/
    path('<int:year>/<int:month>/',
         ArticleMonthArchiveView.as_view(month_format='%m'),
         name="archive_month_numeric"),
    # Example: /2012/aug/
    path('<int:year>/<str:month>/',
         ArticleMonthArchiveView.as_view(),
         name="archive_month"),
]

例myapp / article_archive_month.html

<ul>
    {% for article in object_list %}
        <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
    {% endfor %}
</ul>

<p>
    {% if previous_month %}
        Previous Month: {{ previous_month|date:"F Y" }}
    {% endif %}
    {% if next_month %}
        Next Month: {{ next_month|date:"F Y" }}
    {% endif %}
</p>


WeekArchiveView

class WeekArchiveView

特定の週のすべてのオブジェクトを表示する毎週のアーカイブページ。 allow_futureTrueに設定しない限り、 future に日付が含まれるオブジェクトは表示されません。

祖先(MRO)

環境

MultipleObjectMixinBaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。

  • week:指定された週の最初の日を表すdateオブジェクト。

  • next_weekallow_empty および allow_future に従って、翌週の最初の日を表すdateオブジェクト。

  • previous_weekallow_empty および allow_future に従って、前週の最初の日を表すdateオブジェクト。

ノート

  • _archive_weekのデフォルトのtemplate_name_suffixを使用します。

  • week_format属性は、週番号の解析に使用されるstrptime()形式の文字列です。 次の値がサポートされています。

    • '%U':週が日曜日に始まる米国の週システムに基づいています。 これがデフォルト値です。

    • '%W''%U'と同様ですが、週が月曜日に始まると想定している点が異なります。 これは、ISO8601の週番号と同じではありません。

    • '%V':週が月曜日に始まるISO8601週番号。

      バージョン3.2の新機能: '%V'週形式のサポートが追加されました。

例myapp / views.py

from django.views.generic.dates import WeekArchiveView

from myapp.models import Article

class ArticleWeekArchiveView(WeekArchiveView):
    queryset = Article.objects.all()
    date_field = "pub_date"
    week_format = "%W"
    allow_future = True

例myapp / urls.py

from django.urls import path

from myapp.views import ArticleWeekArchiveView

urlpatterns = [
    # Example: /2012/week/23/
    path('<int:year>/week/<int:week>/',
         ArticleWeekArchiveView.as_view(),
         name="archive_week"),
]

例myapp / article_archive_week.html

<h1>Week {{ week|date:'W' }}</h1>

<ul>
    {% for article in object_list %}
        <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
    {% endfor %}
</ul>

<p>
    {% if previous_week %}
        Previous Week: {{ previous_week|date:"W" }} of year {{ previous_week|date:"Y" }}
    {% endif %}
    {% if previous_week and next_week %}--{% endif %}
    {% if next_week %}
        Next week: {{ next_week|date:"W" }} of year {{ next_week|date:"Y" }}
    {% endif %}
</p>

この例では、週番号を出力しています。 :tfilter: `date` テンプレートフィルターで'W'形式の文字を使用して計算された週番号は、strftime()および[ X183X] と'%W'形式の文字列。 たとえば、2015年の場合、:tfilter: `date` によって出力される週番号は、strftime()によって出力される週番号と比較して1つ多くなります。 :tfilter: `date`'%U' strftime()フォーマット文字列に相当するものはありません。 したがって、:tfilter: `date` を使用してWeekArchiveViewのURLを生成することは避けてください。


DayArchiveView

class DayArchiveView

特定の日のすべてのオブジェクトを表示する日アーカイブページ。 allow_futureTrueに設定しない限り、将来の日は、将来のオブジェクトが存在するかどうかに関係なく、404エラーをスローします。

祖先(MRO)

環境

MultipleObjectMixinBaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。

  • day:指定された日を表すdateオブジェクト。

  • next_dayallow_empty および allow_future に従って、翌日を表すdateオブジェクト。

  • previous_dayallow_empty および allow_future に従って、前日を表すdateオブジェクト。

  • next_monthallow_empty および allow_future に従って、翌月の初日を表すdateオブジェクト。

  • previous_monthallow_empty および allow_future に従って、前月の初日を表すdateオブジェクト。

ノート

  • _archive_dayのデフォルトのtemplate_name_suffixを使用します。

例myapp / views.py

from django.views.generic.dates import DayArchiveView

from myapp.models import Article

class ArticleDayArchiveView(DayArchiveView):
    queryset = Article.objects.all()
    date_field = "pub_date"
    allow_future = True

例myapp / urls.py

from django.urls import path

from myapp.views import ArticleDayArchiveView

urlpatterns = [
    # Example: /2012/nov/10/
    path('<int:year>/<str:month>/<int:day>/',
         ArticleDayArchiveView.as_view(),
         name="archive_day"),
]

例myapp / article_archive_day.html

<h1>{{ day }}</h1>

<ul>
    {% for article in object_list %}
        <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li>
    {% endfor %}
</ul>

<p>
    {% if previous_day %}
        Previous Day: {{ previous_day }}
    {% endif %}
    {% if previous_day and next_day %}--{% endif %}
    {% if next_day %}
        Next Day: {{ next_day }}
    {% endif %}
</p>


TodayArchiveView

class TodayArchiveView

今日のすべてのオブジェクトを表示する日アーカイブページ。 これは django.views.generic.dates.DayArchiveView とまったく同じですが、year / month / dayの代わりに今日の日付が使用される点が異なります。引数。

祖先(MRO)

ノート

  • _archive_todayのデフォルトのtemplate_name_suffixを使用します。

例myapp / views.py

from django.views.generic.dates import TodayArchiveView

from myapp.models import Article

class ArticleTodayArchiveView(TodayArchiveView):
    queryset = Article.objects.all()
    date_field = "pub_date"
    allow_future = True

例myapp / urls.py

from django.urls import path

from myapp.views import ArticleTodayArchiveView

urlpatterns = [
    path('today/',
         ArticleTodayArchiveView.as_view(),
         name="archive_today"),
]

TodayArchiveViewのサンプルテンプレートはどこにありますか?

このビューは、デフォルトで、前の例にある DayArchiveView と同じテンプレートを使用します。 別のテンプレートが必要な場合は、template_name属性を新しいテンプレートの名前に設定します。


DateDetailView

class DateDetailView

個々のオブジェクトを表すページ。 オブジェクトに将来の日付値がある場合、allow_futureTrueに設定しない限り、ビューはデフォルトで404エラーをスローします。

祖先(MRO)

環境

  • DateDetailViewで指定されたmodelに関連付けられた単一のオブジェクトが含まれます。

ノート

  • _detailのデフォルトのtemplate_name_suffixを使用します。

例myapp / urls.py

from django.urls import path
from django.views.generic.dates import DateDetailView

urlpatterns = [
    path('<int:year>/<str:month>/<int:day>/<int:pk>/',
         DateDetailView.as_view(model=Article, date_field="pub_date"),
         name="archive_date_detail"),
]

例myapp / article_detail.html

<h1>{{ object.title }}</h1>

ノート

上記のすべての汎用ビューには、一致するBaseビューがありますが、 MultipleObjectTemplateResponseMixin (アーカイブビューの場合)または SingleObjectTemplateResponseMixinDateDetailView ):

class BaseArchiveIndexView
class BaseYearArchiveView
class BaseMonthArchiveView
class BaseWeekArchiveView
class BaseDayArchiveView
class BaseTodayArchiveView
class BaseDateDetailView