一般的な日付ビュー—Djangoドキュメント
一般的な日付ビュー
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_future
をTrue
に設定しない限り、 future に日付があるオブジェクトは含まれません。祖先(MRO)
環境
django.views.generic.list.MultipleObjectMixin ( django.views.generic.dates.BaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。
date_list
:datetime.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_future
をTrue
に設定しない限り、 future に日付が含まれるオブジェクトは表示されません。祖先(MRO)
- make_object_list
今年のオブジェクトの完全なリストを取得してテンプレートに渡すかどうかを指定するブール値。
True
の場合、オブジェクトのリストがコンテキストで使用できるようになります。False
の場合、None
クエリセットがオブジェクトリストとして使用されます。 デフォルトでは、これはFalse
です。
- get_make_object_list()
オブジェクトリストがコンテキストの一部として返されるかどうかを決定します。 デフォルトで make_object_list を返します。
環境
django.views.generic.list.MultipleObjectMixin ( django.views.generic.dates.BaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。
date_list
:datetime.datetime
オブジェクトとして表される昇順でqueryset
に従って使用可能なオブジェクトを持つすべての月を含む QuerySet オブジェクト。year
:指定された年を表すdate
オブジェクト。next_year
: allow_empty および allow_future に従って、翌年の初日を表すdate
オブジェクト。previous_year
: allow_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_future
をTrue
に設定しない限り、 future に日付が含まれるオブジェクトは表示されません。祖先(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
オブジェクト。
ノート
_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_future
をTrue
に設定しない限り、 future に日付が含まれるオブジェクトは表示されません。祖先(MRO)
環境
MultipleObjectMixin ( BaseDateListView 経由)によって提供されるコンテキストに加えて、テンプレートのコンテキストは次のようになります。
week
:指定された週の最初の日を表すdate
オブジェクト。next_week
: allow_empty および allow_future に従って、翌週の最初の日を表すdate
オブジェクト。previous_week
: allow_empty および allow_future に従って、前週の最初の日を表すdate
オブジェクト。
ノート
_archive_week
のデフォルトのtemplate_name_suffix
を使用します。week_format
属性は、週番号の解析に使用されるstrptime()
形式の文字列です。 次の値がサポートされています。'%U'
:週が日曜日に始まる米国の週システムに基づいています。 これがデフォルト値です。'%W'
:'%U'
と同様ですが、週が月曜日に始まると想定している点が異なります。 これは、ISO8601の週番号と同じではありません。
例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_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
オブジェクト。
ノート
_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_future
をTrue
に設定しない限り、ビューはデフォルトで404エラーをスローします。祖先(MRO)
django.views.generic.detail.SingleObjectTemplateResponseMixin
django.views.generic.detail.BaseDetailView
環境
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 (アーカイブビューの場合)または SingleObjectTemplateResponseMixin ( DateDetailView ):
- class BaseArchiveIndexView
- class BaseYearArchiveView
- class BaseMonthArchiveView
- class BaseWeekArchiveView
- class BaseDayArchiveView
- class BaseTodayArchiveView
- class BaseDateDetailView