# Django 5.0.9.dev20240806133106 ドキュメント

# ジェネリック日付ビュー

日付ベースのジェネリックビュー (`django.views.generic.dates` 内で提供されています) は、日付ベースのデータのために、ドリルダウンページを描画するためのビューです。

注釈

このページの例のいくつかは、`myapp/models.py` 内で下記の通り `Article` モデルが定義されていると仮定します:

    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_future` を `True` にセットしない限り、未来 の日付のオブジェクトは含まれません。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseArchiveIndexView`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`

  コンテキスト

  (`django.views.generic.dates.BaseDateListView` を通じた) `django.views.generic.list.MultipleObjectMixin` によって提供されたコンテキストに加えて、テンプレートのコンテキストは以下のようになります:

  - `date_list`: `queryset` に従ってオブジェクトを利用可能にするすべての年を含む `QuerySet` オブジェクトです。`datetime.datetime` オブジェクトとして表され、降順で表示されます。

  ノート

  - デフォルトの `最新` の `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>

  これは、すべての記事 (article) を出力します。

## `YearArchiveView`

class `YearArchiveView`

  与えられた年の中で有効な月を表示する、年次のアーカイブページです。`allow_future` を `True` にセットしない限り、未来 の日付を伴うオブジェクトは表示されません。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseYearArchiveView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`
  `make_object_list`

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

  `get_make_object_list`()

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

  コンテキスト

  (`django.views.generic.dates.BaseDateListView` を通じた) `django.views.generic.list.MultipleObjectMixin` によって提供されたコンテキストに加えて、テンプレートのコンテキストは以下のようになります:

  - `date_list`: `QuerySet` オブジェクトで、 `datetime.datetime` オブジェクトとして昇順に表現された、 `queryset` に従って利用可能なオブジェクトを持つ全ての月を含みます。
  - `year`: 与えられた年を表す `date` オブジェクト。
  - `next_year`: `allow_empty` と `allow_future` に従って、次の年の最初の日を表す `date` オブジェクト。
  - `previous_year`: `date` オブジェクト。 `allow_empty` と `allow_future` に従います。

  ノート

  - デフォルトの `template_name_suffix` は `_archive_year` です。

  例 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_future` を `True` にセットしない限り、未来 の日付を伴うオブジェクトは表示されません。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseMonthArchiveView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.MonthMixin`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`

  コンテキスト

  `MultipleObjectMixin` (`BaseDateListView` 経由) によって提供されるコンテキストに加えて、テンプレートのコンテキストも提供されます：

  - `date_list`: `QuerySet` オブジェクトで、 `queryset` に従って、与えられた月にオブジェクトが利用可能な全ての日を、 `datetime.datetime` オブジェクトとして昇順で表します。
  - `month`: 与えられた月を表す `date` オブジェクト。
  - `next_month`: `allow_empty` と `allow_future` に従って、次の月の最初の日を表す `date` オブジェクト。
  - `previous_month`: `allow_empty` と `allow_future` に従って、前月の最初の日を表す `date` オブジェクト。

  ノート

  - デフォルトの `template_name_suffix` は `_archive_month` です。

  例 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_future` を `True` にセットしない限り、未来 の日付を伴うオブジェクトは表示されません。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseWeekArchiveView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.WeekMixin`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`

  コンテキスト

  `MultipleObjectMixin` (`BaseDateListView` 経由) によって提供されるコンテキストに加えて、テンプレートのコンテキストも提供されます：

  - `week`: 指定した週の最初の日を表す `date` オブジェクト。
  - `next_week`: `allow_empty` と `allow_future` に従って、次の週の最初の日を表す `date` オブジェクト。
  - `previous_week`: `allow_empty` と `allow_future` に従って、前の週の最初の日を表す `date` オブジェクト。

  ノート

  - デフォルトの `template_name_suffix` は `_archive_week` です。
  - `week_format` 属性は `strptime()` フォーマット文字列で、週番号をパースするために使用されます。以下の値がサポートされています：
    - `'%U'`: 日曜日が週の始まりとなるアメリカ合衆国の週システムに基づきます。これはデフォルト値です。
    - `'%W'`: `'%U'` と似ていますが、週が月曜日から始まると仮定している点が異なります。これはISO 8601の週番号とは異なります。
    - `'%V'`: 週が月曜日から始まるISO 8601の週番号。

  例 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>

  この例では週番号を出力しています。 テンプレートフィルタの `date` が `'W'` フォーマット文字列で計算した週番号は、 `strftime()` や `strptime()` が `'%W'` フォーマット文字列で計算した週番号と必ずしも同じではないことに注意してください。例えば2015年の場合、 `date` が出力する週番号は `strftime()` が出力する週番号よりも1つ大きくなります。`date` には `'%U'` `strftime()` の書式文字列と等価なものはありません。そのため、 `date` を使って `WeekArchiveView` の URL を生成することは避けるべきです。

## `DayArchiveView`

class `DayArchiveView`

  与えられた日の中で有効な全オブジェクトを表示する、日次のアーカイブページです。`allow_future` を `True` にセットしない限り、未来の日付に対するオブジェクトがするかどうかにかかわらず、未来の日付は 404 エラーを返します。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseDayArchiveView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.MonthMixin`
  - `django.views.generic.dates.DayMixin`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`

  コンテキスト

  `MultipleObjectMixin` (`BaseDateListView` 経由) によって提供されるコンテキストに加えて、テンプレートのコンテキストも提供されます：

  - `day`: 指定した日を表す `date` オブジェクト。
  - `next_day`: `allow_empty` と `allow_future` に従って、次の日を表す `date` オブジェクト。
  - `previous_day`: `allow_empty` と `allow_future` に従って、前日を表す `date` オブジェクト。
  - `next_month`: `allow_empty` と `allow_future` に従って、次の月の最初の日を表す `date` オブジェクト。
  - `previous_month`: `allow_empty` と `allow_future` に従って、前月の最初の日を表す `date` オブジェクト。

  ノート

  - デフォルトの `template_name_suffix` は `_archive_day` です。

  例 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` とまったく同じです。

  継承元 (MRO)

  - `django.views.generic.list.MultipleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseTodayArchiveView`
  - `django.views.generic.dates.BaseDayArchiveView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.MonthMixin`
  - `django.views.generic.dates.DayMixin`
  - `django.views.generic.dates.BaseDateListView`
  - `django.views.generic.list.MultipleObjectMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.base.View`

  ノート

  - デフォルトの `template_name_suffix` は `_archive_today` です。

  例 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_future` を `True` にセットしない限り、デフォルトでビューは 404 エラーを返します。

  継承元 (MRO)

  - `django.views.generic.detail.SingleObjectTemplateResponseMixin`
  - `django.views.generic.base.TemplateResponseMixin`
  - `django.views.generic.dates.BaseDateDetailView`
  - `django.views.generic.dates.YearMixin`
  - `django.views.generic.dates.MonthMixin`
  - `django.views.generic.dates.DayMixin`
  - `django.views.generic.dates.DateMixin`
  - `django.views.generic.detail.BaseDetailView`
  - `django.views.generic.detail.SingleObjectMixin`
  - `django.views.generic.base.View`

  コンテキスト

  - `DateDetailView` で指定された `model` に関連付けられたオブジェクトを1つだけ含みます。

  ノート

  - デフォルトの `template_name_suffix` は `_detail` です。

  例 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>

注釈

上に挙げたすべてのジェネリックビューは、 `MultipleObjectTemplateResponseMixin` (アーカイブビューの場合) や `SingleObjectTemplateResponseMixin` (`DateDetailView` の場合) を含まないというだけで、同じ `Base` ビューを持っています：

class `BaseArchiveIndexView`

class `BaseYearArchiveView`

class `BaseMonthArchiveView`

class `BaseWeekArchiveView`

class `BaseDayArchiveView`

class `BaseTodayArchiveView`

class `BaseDateDetailView`