基于日期的通用视图(在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
¶ArchiveIndexView
[source]¶根据日期显示“最新”对象的顶级索引页。 除非您将True
设置为allow_future
,否则不包括日期在未来中的对象。
祖先(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
Context 上下文
除了django.views.generic.list.MultipleObjectMixin
(通过django.views.generic.dates.BaseDateListView
)提供的上下文,模板的上下文将是:
date_list
:包含具有根据queryset
可用的对象的所有年份的QuerySet
对象,表示为datetime.datetime
对象,按降序排列。笔记
latest
的默认context_object_name
。_archive
的默认template_name_suffix
。date_list_period
,但可以使用属性date_list
更改为月或日。 这也适用于所有子类视图。示例myapp / urls.py:
from django.conf.urls import url
from django.views.generic.dates import ArchiveIndexView
from myapp.models import Article
urlpatterns = [
url(r'^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
¶YearArchiveView
[source]¶一个年度归档页面,显示给定年份中的所有可用月份。 除非您将True
设置为allow_future
,否则不会显示未来中日期的对象。
祖先(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 T0> ¶ T1>
一个布尔值,指定是否检索今年的完整对象列表,并将其传递给模板。 如果True
,对象列表将可用于上下文。 如果None
,则False
查询集将用作对象列表。 默认情况下,这是False
。
get_make_object_list T0>()¶ T1>
确定对象列表是否将作为上下文的一部分返回。
默认返回make_object_list
。
上下文
除了django.views.generic.list.MultipleObjectMixin
(通过django.views.generic.dates.BaseDateListView
)提供的上下文,模板的上下文将是:
date_list
:包含具有根据queryset
可用的对象的所有月份的QuerySet
对象,表示为datetime.datetime
对象,按升序排列。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.conf.urls import url
from myapp.views import ArticleYearArchiveView
urlpatterns = [
url(r'^(?P<year>[0-9]{4})/$',
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
¶MonthArchiveView
[source]¶显示给定月份中所有对象的月度归档页面。 除非您将True
设置为allow_future
,否则不会显示未来中日期的对象。
祖先(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
对象。笔记
_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.conf.urls import url
from myapp.views import ArticleMonthArchiveView
urlpatterns = [
# Example: /2012/aug/
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/$',
ArticleMonthArchiveView.as_view(),
name="archive_month"),
# Example: /2012/08/
url(r'^(?P<year>[0-9]{4})/(?P<month>[0-9]+)/$',
ArticleMonthArchiveView.as_view(month_format='%m'),
name="archive_month_numeric"),
]
示例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
¶WeekArchiveView
[source]¶显示给定周内所有对象的每周归档页面。 除非您将True
设置为allow_future
,否则不会显示未来中日期的对象。
祖先(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
对象。笔记
_archive_week
的默认template_name_suffix
。week_format
属性是用于解析周号的strptime()
格式字符串。 支持以下值:'%U'
:根据周星期天开始的美国周系统。 这是默认值。'%W'
:与'%U'
类似,除了它假定周从星期一开始。 这与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.conf.urls import url
from myapp.views import ArticleWeekArchiveView
urlpatterns = [
# Example: /2012/week/23/
url(r'^(?P<year>[0-9]{4})/week/(?P<week>[0-9]+)/$',
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>
在此示例中,您输出的是周数。 Keep in mind that week
numbers computed by the date
template filter with the 'W'
format character are not always the same as those computed by
strftime()
and strptime()
with the '%W'
format
string. For year 2015, for example, week numbers output by date
are higher by one compared to those output by strftime()
. date
中的'%U'
strftime()
格式字符串没有等价物。 因此,您应避免使用date
生成WeekArchiveView
的URL。
DayArchiveView
¶DayArchiveView
[source]¶显示指定日期内所有对象的日期归档页面。 除非您将True
设置为allow_future
,否则以后的日期都会抛出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
:表示前一天的date
对象,根据allow_empty
和allow_future
。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.conf.urls import url
from myapp.views import ArticleDayArchiveView
urlpatterns = [
# Example: /2012/nov/10/
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/(?P<day>[0-9]+)/$',
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
¶TodayArchiveView
[source]¶显示今天的所有对象的日归档页面。 This is exactly the
same as django.views.generic.dates.DayArchiveView
, except today’s
date is used instead of the year
/month
/day
arguments.
祖先(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
笔记
_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.conf.urls import url
from myapp.views import ArticleTodayArchiveView
urlpatterns = [
url(r'^today/$',
ArticleTodayArchiveView.as_view(),
name="archive_today"),
]
TodayArchiveView
的示例模板在哪里?
此视图默认使用与上一个示例中的DayArchiveView
相同的模板。 如果您需要其他模板,请将template_name
属性设置为新模板的名称。
DateDetailView
¶DateDetailView
[source]¶表示个别对象的网页。 如果对象未来有日期值,默认情况下视图将抛出404错误,除非您将True
设置为allow_future
。
祖先(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
相关联的单个对象。笔记
_detail
的默认template_name_suffix
。示例myapp / urls.py:
from django.conf.urls import url
from django.views.generic.dates import DateDetailView
urlpatterns = [
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/(?P<day>[0-9]+)/(?P<pk>[0-9]+)/$',
DateDetailView.as_view(model=Article, date_field="pub_date"),
name="archive_date_detail"),
]
示例myapp / article_detail.html:
<h1>{{ object.title }}</h1>
注
All of the generic views listed above have matching Base
views that
only differ in that they do not include the
MultipleObjectTemplateResponseMixin
(for the archive views) or
SingleObjectTemplateResponseMixin
(for the DateDetailView
):
2017年9月6日