ジェネリック日付ビュー¶
日付ベースのジェネリックビュー (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.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)
- 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)
コンテキスト
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)
コンテキスト
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)
コンテキスト
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)
ノート
デフォルトの
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)
コンテキスト
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
ビューを持っています: