“Django/docs/3.1.x/ref/class-based-views/generic-date-based”的版本间差异
(autoload) |
小 (Page commit) |
||
第1行: | 第1行: | ||
+ | {{DISPLAYTITLE:通用日期视图 — Django 文档}} | ||
<div id="module-django.views.generic.dates" class="section"> | <div id="module-django.views.generic.dates" class="section"> | ||
第4行: | 第5行: | ||
= 通用日期视图 = | = 通用日期视图 = | ||
− | + | [[#module-django.views.generic.dates|django.views.generic.dates]] 中提供的基于日期的通用视图是用于显示基于日期数据的钻取页面的视图。 | |
<div class="admonition note"> | <div class="admonition note"> | ||
− | + | 笔记 | |
− | + | 此页面上的一些示例假设 <code>Article</code> 模型已在 <code>myapp/models.py</code> 中定义如下: | |
− | |||
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
第17行: | 第17行: | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.db import models |
from django.urls import reverse | from django.urls import reverse | ||
第25行: | 第25行: | ||
def get_absolute_url(self): | def get_absolute_url(self): | ||
− | return reverse('article-detail', kwargs={'pk': self.pk})</ | + | return reverse('article-detail', kwargs={'pk': self.pk})</syntaxhighlight> |
</div> | </div> | ||
第34行: | 第34行: | ||
<div id="archiveindexview" class="section"> | <div id="archiveindexview" class="section"> | ||
− | == | + | == ArchiveIndexView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">ArchiveIndexView</span></span></dt> |
− | <dd><p> | + | <dd><p>按日期显示“最新”对象的顶级索引页面。 除非您将 <code>allow_future</code> 设置为 <code>True</code>,否则不包括日期在 ''future'' 中的对象。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | <code>True</code> | ||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第51行: | 第49行: | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''语境'''</p> |
− | <p> | + | <p>除了 [[../mixins-multiple-object#django.views.generic.list|django.views.generic.list.MultipleObjectMixin]](通过 [[../mixins-date-based#django.views.generic.dates|django.views.generic.dates.BaseDateListView]])提供的上下文,模板的上下文将是:</p> |
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | [[../mixins-date-based#django.views.generic.dates| | ||
− | |||
<ul> | <ul> | ||
− | <li><p><code>date_list</code> | + | <li><p><code>date_list</code>:一个 [[../../models/querysets#django.db.models.query.QuerySet|QuerySet]] 对象,包含根据 <code>queryset</code> 具有可用对象的所有年份,以降序表示为 <code>datetime.datetime</code> 对象。</p></li></ul> |
− | |||
− | <code>queryset</code> | ||
− | |||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>latest</code> 的默认 <code>context_object_name</code>。</p></li> |
− | <li><p> | + | <li><p>使用 <code>_archive</code> 的默认 <code>template_name_suffix</code>。</p></li> |
− | <li><p> | + | <li><p>默认为按年提供 <code>date_list</code>,但可以使用属性 <code>date_list_period</code> 将其更改为月或日。 这也适用于所有子类视图。</p></li></ul> |
− | |||
− | |||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from django.views.generic.dates import ArchiveIndexView | from django.views.generic.dates import ArchiveIndexView | ||
第82行: | 第72行: | ||
urlpatterns = [ | urlpatterns = [ | ||
path('archive/', | path('archive/', | ||
− | ArchiveIndexView.as_view(model=Article, date_field= | + | ArchiveIndexView.as_view(model=Article, date_field="pub_date"), |
− | name= | + | name="article_archive"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_archive.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><ul> |
{% for article in latest %} | {% for article in latest %} | ||
− | + | <li>{{ article.pub_date }}: {{ article.title }}</li> | |
{% endfor %} | {% endfor %} | ||
− | + | </ul></syntaxhighlight> | |
</div> | </div> | ||
</div> | </div> | ||
− | <p> | + | <p>这将输出所有文章。</p></dd></dl> |
第109行: | 第99行: | ||
<div id="yeararchiveview" class="section"> | <div id="yeararchiveview" class="section"> | ||
− | == | + | == YearArchiveView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">YearArchiveView</span></span></dt> |
− | <dd><p> | + | <dd><p>显示给定年份中所有可用月份的年度存档页面。 除非将 <code>allow_future</code> 设置为 <code>True</code>,否则不会显示日期在 ''future'' 中的对象。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | <code>allow_future</code> | ||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第128行: | 第116行: | ||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-name descname"><span class="pre">make_object_list</span></span></dt> |
− | <dd><p> | + | <dd><p>一个布尔值,指定是否检索今年的完整对象列表并将它们传递给模板。 如果 <code>True</code>,对象列表将可用于上下文。 如果是 <code>False</code>,则 <code>None</code> 查询集将用作对象列表。 默认情况下,这是 <code>False</code>。</p></dd></dl> |
− | |||
− | |||
− | <code>None</code> | ||
− | <code>False</code> | ||
<dl> | <dl> | ||
− | <dt>< | + | <dt><span class="sig-name descname"><span class="pre">get_make_object_list</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span></dt> |
− | <dd><p> | + | <dd><p>确定对象列表是否将作为上下文的一部分返回。 默认返回 [[#django.views.generic.dates.YearArchiveView.make_object_list|make_object_list]]。</p></dd></dl> |
− | |||
− | <p>''' | + | <p>'''语境'''</p> |
− | <p> | + | <p>除了 [[../mixins-multiple-object#django.views.generic.list|django.views.generic.list.MultipleObjectMixin]](通过 [[../mixins-date-based#django.views.generic.dates|django.views.generic.dates.BaseDateListView]])提供的上下文,模板的上下文将是:</p> |
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | [[../mixins-date-based#django.views.generic.dates| | ||
− | |||
<ul> | <ul> | ||
− | <li><p><code>date_list</code> | + | <li><p><code>date_list</code>:一个 [[../../models/querysets#django.db.models.query.QuerySet|QuerySet]] 对象,包含根据 <code>queryset</code> 具有可用对象的所有月份,表示为 <code>datetime.datetime</code> 对象,按升序排列。</p></li> |
− | + | <li><p><code>year</code>:代表给定年份的 <code>date</code> 对象。</p></li> | |
− | <code>queryset</code> | + | <li><p><code>next_year</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],代表下一年第一天的 <code>date</code> 对象。</p></li> |
− | + | <li><p><code>previous_year</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示前一年第一天的 <code>date</code> 对象。</p></li></ul> | |
− | <li><p><code>year</code> | ||
− | |||
− | <li><p><code>next_year</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <li><p><code>previous_year</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_archive_year</code> 的默认 <code>template_name_suffix</code>。</p></li></ul> |
− | <p>''' | + | <p>'''示例 myapp/views.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.views.generic.dates import YearArchiveView |
from myapp.models import Article | from myapp.models import Article | ||
第176行: | 第146行: | ||
class ArticleYearArchiveView(YearArchiveView): | class ArticleYearArchiveView(YearArchiveView): | ||
queryset = Article.objects.all() | queryset = Article.objects.all() | ||
− | date_field = | + | date_field = "pub_date" |
make_object_list = True | make_object_list = True | ||
− | allow_future = True</ | + | allow_future = True</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from myapp.views import ArticleYearArchiveView | from myapp.views import ArticleYearArchiveView | ||
urlpatterns = [ | urlpatterns = [ | ||
− | path(' | + | path('<int:year>/', |
ArticleYearArchiveView.as_view(), | ArticleYearArchiveView.as_view(), | ||
− | name= | + | name="article_year_archive"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_archive_year.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><ul> |
{% for date in date_list %} | {% for date in date_list %} | ||
− | + | <li>{{ date|date }}</li> | |
{% endfor %} | {% endfor %} | ||
− | + | </ul> | |
− | + | <div> | |
− | + | <h1>All Articles for {{ year|date:"Y" }}</h1> | |
{% for obj in object_list %} | {% for obj in object_list %} | ||
− | + | <p> | |
− | {{ obj.title }} - {{ obj.pub_date|date: | + | {{ obj.title }} - {{ obj.pub_date|date:"F j, Y" }} |
− | + | </p> | |
{% endfor %} | {% endfor %} | ||
− | + | </div></syntaxhighlight> | |
</div> | </div> | ||
第229行: | 第199行: | ||
<div id="montharchiveview" class="section"> | <div id="montharchiveview" class="section"> | ||
− | == | + | == MonthArchiveView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">MonthArchiveView</span></span></dt> |
− | <dd><p> | + | <dd><p>显示给定月份中所有对象的每月存档页面。 除非将 <code>allow_future</code> 设置为 <code>True</code>,否则不会显示日期在 ''future'' 中的对象。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | <code>True</code> | ||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第248行: | 第216行: | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''语境'''</p> |
− | <p> | + | <p>除了 [[../mixins-multiple-object#django.views.generic.list|MultipleObjectMixin]](通过 [[../mixins-date-based#django.views.generic.dates|BaseDateListView]])提供的上下文之外,模板的上下文将是:</p> |
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | [[../mixins-date-based#django.views.generic.dates| | ||
− | |||
<ul> | <ul> | ||
− | <li><p><code>date_list</code> | + | <li><p><code>date_list</code>:一个 [[../../models/querysets#django.db.models.query.QuerySet|QuerySet]] 对象,包含给定月份中所有有对象可用的天,根据 <code>queryset</code>,表示为 <code>datetime.datetime</code> 对象,按升序排列.</p></li> |
− | + | <li><p><code>month</code>:代表给定月份的 <code>date</code> 对象。</p></li> | |
− | + | <li><p><code>next_month</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示下个月第一天的 <code>date</code> 对象。</p></li> | |
− | + | <li><p><code>previous_month</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示上个月第一天的 <code>date</code> 对象。</p></li></ul> | |
− | <li><p><code>month</code> | ||
− | |||
− | <li><p><code>next_month</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <li><p><code>previous_month</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_archive_month</code> 的默认 <code>template_name_suffix</code>。</p></li></ul> |
− | <p>''' | + | <p>'''示例 myapp/views.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.views.generic.dates import MonthArchiveView |
from myapp.models import Article | from myapp.models import Article | ||
第284行: | 第239行: | ||
class ArticleMonthArchiveView(MonthArchiveView): | class ArticleMonthArchiveView(MonthArchiveView): | ||
queryset = Article.objects.all() | queryset = Article.objects.all() | ||
− | date_field = | + | date_field = "pub_date" |
− | allow_future = True</ | + | allow_future = True</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from myapp.views import ArticleMonthArchiveView | from myapp.views import ArticleMonthArchiveView | ||
第301行: | 第256行: | ||
urlpatterns = [ | urlpatterns = [ | ||
# Example: /2012/08/ | # Example: /2012/08/ | ||
− | path(' | + | path('<int:year>/<int:month>/', |
ArticleMonthArchiveView.as_view(month_format='%m'), | ArticleMonthArchiveView.as_view(month_format='%m'), | ||
− | name= | + | name="archive_month_numeric"), |
# Example: /2012/aug/ | # Example: /2012/aug/ | ||
− | path(' | + | path('<int:year>/<str:month>/', |
ArticleMonthArchiveView.as_view(), | ArticleMonthArchiveView.as_view(), | ||
− | name= | + | name="archive_month"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_archive_month.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><ul> |
{% for article in object_list %} | {% for article in object_list %} | ||
− | + | <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li> | |
{% endfor %} | {% endfor %} | ||
− | + | </ul> | |
− | + | <p> | |
{% if previous_month %} | {% if previous_month %} | ||
− | Previous Month: {{ previous_month|date: | + | Previous Month: {{ previous_month|date:"F Y" }} |
{% endif %} | {% endif %} | ||
{% if next_month %} | {% if next_month %} | ||
− | Next Month: {{ next_month|date: | + | Next Month: {{ next_month|date:"F Y" }} |
{% endif %} | {% endif %} | ||
− | + | </p></syntaxhighlight> | |
</div> | </div> | ||
第341行: | 第296行: | ||
<div id="weekarchiveview" class="section"> | <div id="weekarchiveview" class="section"> | ||
− | == | + | == WeekArchiveView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">WeekArchiveView</span></span></dt> |
− | <dd><p> | + | <dd><p>显示给定周内所有对象的每周存档页面。 除非将 <code>allow_future</code> 设置为 <code>True</code>,否则不会显示日期在 ''future'' 中的对象。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | <code>True</code> | ||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第360行: | 第313行: | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''语境'''</p> |
− | <p> | + | <p>除了 [[../mixins-multiple-object#django.views.generic.list|MultipleObjectMixin]](通过 [[../mixins-date-based#django.views.generic.dates|BaseDateListView]])提供的上下文之外,模板的上下文将是:</p> |
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | [[../mixins-date-based#django.views.generic.dates| | ||
− | |||
<ul> | <ul> | ||
− | <li><p><code>week</code> | + | <li><p><code>week</code>:表示给定周的第一天的 <code>date</code> 对象。</p></li> |
− | + | <li><p><code>next_week</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示下周第一天的 <code>date</code> 对象。</p></li> | |
− | <li><p><code>next_week</code> | + | <li><p><code>previous_week</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],代表上周第一天的 <code>date</code> 对象。</p></li></ul> |
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <li><p><code>previous_week</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_archive_week</code> 的默认 <code>template_name_suffix</code>。</p></li> |
− | <li><p> | + | <li><p><code>week_format</code> 属性是用于解析周数的 <code>strptime()</code> 格式字符串。 支持以下值:</p> |
− | |||
<ul> | <ul> | ||
− | <li><p><code>'%U'</code> | + | <li><p><code>'%U'</code>:基于美国的星期系统,星期从星期日开始。 这是默认值。</p></li> |
− | + | <li><p><code>'%W'</code>:与 <code>'%U'</code> 类似,只是它假设一周从星期一开始。 这与 ISO 8601 周数不同。</p></li></ul> | |
− | <li><p><code>'%W'</code> | ||
− | |||
</li></ul> | </li></ul> | ||
− | <p>''' | + | <p>'''示例 myapp/views.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.views.generic.dates import WeekArchiveView |
from myapp.models import Article | from myapp.models import Article | ||
第400行: | 第340行: | ||
class ArticleWeekArchiveView(WeekArchiveView): | class ArticleWeekArchiveView(WeekArchiveView): | ||
queryset = Article.objects.all() | queryset = Article.objects.all() | ||
− | date_field = | + | date_field = "pub_date" |
− | week_format = | + | week_format = "%W" |
− | allow_future = True</ | + | allow_future = True</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from myapp.views import ArticleWeekArchiveView | from myapp.views import ArticleWeekArchiveView | ||
第418行: | 第358行: | ||
urlpatterns = [ | urlpatterns = [ | ||
# Example: /2012/week/23/ | # Example: /2012/week/23/ | ||
− | path(' | + | path('<int:year>/week/<int:week>/', |
ArticleWeekArchiveView.as_view(), | ArticleWeekArchiveView.as_view(), | ||
− | name= | + | name="archive_week"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_archive_week.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><h1>Week {{ week|date:'W' }}</h1> |
− | + | <ul> | |
{% for article in object_list %} | {% for article in object_list %} | ||
− | + | <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li> | |
{% endfor %} | {% endfor %} | ||
− | + | </ul> | |
− | + | <p> | |
{% if previous_week %} | {% if previous_week %} | ||
− | Previous Week: {{ previous_week|date: | + | Previous Week: {{ previous_week|date:"W" }} of year {{ previous_week|date:"Y" }} |
{% endif %} | {% endif %} | ||
{% if previous_week and next_week %}--{% endif %} | {% if previous_week and next_week %}--{% endif %} | ||
{% if next_week %} | {% if next_week %} | ||
− | Next week: {{ next_week|date: | + | Next week: {{ next_week|date:"W" }} of year {{ next_week|date:"Y" }} |
{% endif %} | {% endif %} | ||
− | + | </p></syntaxhighlight> | |
</div> | </div> | ||
</div> | </div> | ||
− | <p> | + | <p>在本例中,您将输出周数。 请记住,使用 <code>'W'</code> 格式字符的 [[#id1|:tfilter:`date`]] 模板过滤器计算的周数并不总是与 <code>strftime()</code> 和 [ X183X] 与 <code>'%W'</code> 格式字符串。 例如,对于 2015 年,[[#id3|:tfilter:`date`]] 输出的周数比 <code>strftime()</code> 输出的周数高 1。 [[#id5|:tfilter:`date`]] 中的 <code>'%U'</code> <code>strftime()</code> 格式字符串没有等效项。 因此,您应该避免使用 [[#id7|:tfilter:`date`]] 为 <code>WeekArchiveView</code> 生成 URL。</p></dd></dl> |
− | |||
− | |||
− | <code>strftime()</code> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
第466行: | 第398行: | ||
<div id="dayarchiveview" class="section"> | <div id="dayarchiveview" class="section"> | ||
− | == | + | == DayArchiveView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">DayArchiveView</span></span></dt> |
− | <dd><p> | + | <dd><p>一天存档页面,显示给定日期内的所有对象。 未来几天会抛出 404 错误,无论未来几天是否存在任何对象,除非您将 <code>allow_future</code> 设置为 <code>True</code>。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | |||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第486行: | 第416行: | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''语境'''</p> |
− | <p> | + | <p>除了 [[../mixins-multiple-object#django.views.generic.list|MultipleObjectMixin]](通过 [[../mixins-date-based#django.views.generic.dates|BaseDateListView]])提供的上下文之外,模板的上下文将是:</p> |
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | [[../mixins-date-based#django.views.generic.dates| | ||
− | |||
<ul> | <ul> | ||
− | <li><p><code>day</code> | + | <li><p><code>day</code>:代表给定日期的 <code>date</code> 对象。</p></li> |
− | + | <li><p><code>next_day</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],代表第二天的 <code>date</code> 对象。</p></li> | |
− | <li><p><code>next_day</code> | + | <li><p><code>previous_day</code>:代表前一天的 <code>date</code> 对象,根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]]。</p></li> |
− | + | <li><p><code>next_month</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示下个月第一天的 <code>date</code> 对象。</p></li> | |
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | + | <li><p><code>previous_month</code>:根据 [[../mixins-date-based#django.views.generic.dates.BaseDateListView|allow_empty]] 和 [[../mixins-date-based#django.views.generic.dates.DateMixin|allow_future]],表示上个月第一天的 <code>date</code> 对象。</p></li></ul> |
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <li><p><code>previous_day</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin| | ||
− | <li><p><code>next_month</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <li><p><code>previous_month</code> | ||
− | |||
− | [[../mixins-date-based#django.views.generic.dates.BaseDateListView| | ||
− | [[../mixins-date-based#django.views.generic.dates.DateMixin|<code> | ||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_archive_day</code> 的默认 <code>template_name_suffix</code>。</p></li></ul> |
− | <p>''' | + | <p>'''示例 myapp/views.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.views.generic.dates import DayArchiveView |
from myapp.models import Article | from myapp.models import Article | ||
第526行: | 第440行: | ||
class ArticleDayArchiveView(DayArchiveView): | class ArticleDayArchiveView(DayArchiveView): | ||
queryset = Article.objects.all() | queryset = Article.objects.all() | ||
− | date_field = | + | date_field = "pub_date" |
− | allow_future = True</ | + | allow_future = True</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from myapp.views import ArticleDayArchiveView | from myapp.views import ArticleDayArchiveView | ||
第543行: | 第457行: | ||
urlpatterns = [ | urlpatterns = [ | ||
# Example: /2012/nov/10/ | # Example: /2012/nov/10/ | ||
− | path(' | + | path('<int:year>/<str:month>/<int:day>/', |
ArticleDayArchiveView.as_view(), | ArticleDayArchiveView.as_view(), | ||
− | name= | + | name="archive_day"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_archive_day.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><h1>{{ day }}</h1> |
− | + | <ul> | |
{% for article in object_list %} | {% for article in object_list %} | ||
− | + | <li>{{ article.pub_date|date:"F j, Y" }}: {{ article.title }}</li> | |
{% endfor %} | {% endfor %} | ||
− | + | </ul> | |
− | + | <p> | |
{% if previous_day %} | {% if previous_day %} | ||
Previous Day: {{ previous_day }} | Previous Day: {{ previous_day }} | ||
第572行: | 第486行: | ||
Next Day: {{ next_day }} | Next Day: {{ next_day }} | ||
{% endif %} | {% endif %} | ||
− | + | </p></syntaxhighlight> | |
</div> | </div> | ||
第582行: | 第496行: | ||
<div id="todayarchiveview" class="section"> | <div id="todayarchiveview" class="section"> | ||
− | == | + | == TodayArchiveView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">TodayArchiveView</span></span></dt> |
− | <dd><p> | + | <dd><p>显示 ''today'' 的所有对象的日存档页面。 这与 [[#django.views.generic.dates.DayArchiveView|django.views.generic.dates.DayArchiveView]] 完全相同,除了使用今天的日期而不是 <code>year</code>/<code>month</code>/<code>day</code>论据。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | |||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-multiple-object#django.views.generic.list|<code>django.views.generic.list.MultipleObjectTemplateResponseMixin</code>]]</p></li> | ||
第603行: | 第515行: | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_archive_today</code> 的默认 <code>template_name_suffix</code>。</p></li></ul> |
− | <p>''' | + | <p>'''示例 myapp/views.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.views.generic.dates import TodayArchiveView |
from myapp.models import Article | from myapp.models import Article | ||
第618行: | 第530行: | ||
class ArticleTodayArchiveView(TodayArchiveView): | class ArticleTodayArchiveView(TodayArchiveView): | ||
queryset = Article.objects.all() | queryset = Article.objects.all() | ||
− | date_field = | + | date_field = "pub_date" |
− | allow_future = True</ | + | allow_future = True</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from myapp.views import ArticleTodayArchiveView | from myapp.views import ArticleTodayArchiveView | ||
第636行: | 第548行: | ||
path('today/', | path('today/', | ||
ArticleTodayArchiveView.as_view(), | ArticleTodayArchiveView.as_view(), | ||
− | name= | + | name="archive_today"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
第644行: | 第556行: | ||
<div class="admonition-where-is-the-example-template-for-todayarchiveview admonition"> | <div class="admonition-where-is-the-example-template-for-todayarchiveview admonition"> | ||
− | <p> | + | <p><code>TodayArchiveView</code> 的示例模板在哪里?</p> |
− | <p> | + | <p>默认情况下,此视图使用与 [[../flattened-index#DayArchiveView|DayArchiveView]] 相同的模板,这在前面的示例中。 如果您需要不同的模板,请将 <code>template_name</code> 属性设置为新模板的名称。</p> |
− | [[../flattened-index#DayArchiveView| | ||
− | |||
− | |||
</div></dd></dl> | </div></dd></dl> | ||
第656行: | 第565行: | ||
<div id="datedetailview" class="section"> | <div id="datedetailview" class="section"> | ||
− | == | + | == DateDetailView == |
<dl> | <dl> | ||
− | <dt>''class'' < | + | <dt>''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">DateDetailView</span></span></dt> |
− | <dd><p> | + | <dd><p>代表单个对象的页面。 如果对象将来有日期值,视图默认会抛出 404 错误,除非你将 <code>allow_future</code> 设置为 <code>True</code>。</p> |
− | + | <p>'''祖先 (MRO)'''</p> | |
− | <code>allow_future</code> | ||
− | <p>''' | ||
<ul> | <ul> | ||
<li><p>[[../mixins-single-object#django.views.generic.detail|<code>django.views.generic.detail.SingleObjectTemplateResponseMixin</code>]]</p></li> | <li><p>[[../mixins-single-object#django.views.generic.detail|<code>django.views.generic.detail.SingleObjectTemplateResponseMixin</code>]]</p></li> | ||
第672行: | 第579行: | ||
<li><p>[[../mixins-date-based#django.views.generic.dates|<code>django.views.generic.dates.DayMixin</code>]]</p></li> | <li><p>[[../mixins-date-based#django.views.generic.dates|<code>django.views.generic.dates.DayMixin</code>]]</p></li> | ||
<li><p>[[../mixins-date-based#django.views.generic.dates|<code>django.views.generic.dates.DateMixin</code>]]</p></li> | <li><p>[[../mixins-date-based#django.views.generic.dates|<code>django.views.generic.dates.DateMixin</code>]]</p></li> | ||
− | <li><p><code>django.views.generic.detail.BaseDetailView</code></p></li> | + | <li><p>[[../generic-display#django.views.generic.detail|<code>django.views.generic.detail.BaseDetailView</code>]]</p></li> |
<li><p>[[../mixins-single-object#django.views.generic.detail|<code>django.views.generic.detail.SingleObjectMixin</code>]]</p></li> | <li><p>[[../mixins-single-object#django.views.generic.detail|<code>django.views.generic.detail.SingleObjectMixin</code>]]</p></li> | ||
<li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | <li><p>[[../base#django.views.generic.base|<code>django.views.generic.base.View</code>]]</p></li></ul> | ||
− | <p>''' | + | <p>'''语境'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>包括与 <code>DateDetailView</code> 中指定的 <code>model</code> 关联的单个对象。</p></li></ul> |
− | |||
− | <p>''' | + | <p>'''笔记'''</p> |
<ul> | <ul> | ||
− | <li><p> | + | <li><p>使用 <code>_detail</code> 的默认 <code>template_name_suffix</code>。</p></li></ul> |
− | <p>''' | + | <p>'''示例 myapp/urls.py''':</p> |
<div class="highlight-default notranslate"> | <div class="highlight-default notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="python">from django.urls import path |
from django.views.generic.dates import DateDetailView | from django.views.generic.dates import DateDetailView | ||
urlpatterns = [ | urlpatterns = [ | ||
− | path(' | + | path('<int:year>/<str:month>/<int:day>/<int:pk>/', |
− | DateDetailView.as_view(model=Article, date_field= | + | DateDetailView.as_view(model=Article, date_field="pub_date"), |
− | name= | + | name="archive_date_detail"), |
− | ]</ | + | ]</syntaxhighlight> |
</div> | </div> | ||
</div> | </div> | ||
− | <p>''' | + | <p>'''示例 myapp/article_detail.html''':</p> |
<div class="highlight-html+django notranslate"> | <div class="highlight-html+django notranslate"> | ||
<div class="highlight"> | <div class="highlight"> | ||
− | < | + | <syntaxhighlight lang="html+django"><h1>{{ object.title }}</h1></syntaxhighlight> |
</div> | </div> | ||
第715行: | 第621行: | ||
<div class="admonition note"> | <div class="admonition note"> | ||
− | + | 笔记 | |
− | + | 上面列出的所有通用视图都有匹配的 <code>Base</code> 视图,不同之处仅在于它们不包括 [[../mixins-multiple-object#django.views.generic.list|MultipleObjectTemplateResponseMixin]](对于存档视图)或 [[../mixins-single-object#django.views.generic.detail|SingleObjectTemplateResponseMixin]](对于[[../flattened-index#DateDetailView|DateDetailView]]): | |
− | |||
− | [[../mixins-multiple-object#django.views.generic.list| | ||
− | |||
− | [[../mixins-single-object#django.views.generic.detail| | ||
− | |||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseArchiveIndexView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseYearArchiveView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseMonthArchiveView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseWeekArchiveView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseDayArchiveView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseTodayArchiveView</span></span> |
: | : | ||
− | ; ''class'' < | + | ; ''<span class="pre">class</span>'' <span class="sig-name descname"><span class="pre">BaseDateDetailView</span></span> |
: | : | ||
第749行: | 第650行: | ||
</div> | </div> | ||
+ | |||
+ | </div> | ||
+ | <div class="clearer"> | ||
+ | |||
+ | |||
</div> | </div> | ||
− | [[Category:Django 3.1.x | + | [[Category:Django 3.1.x 文档]] |
2021年10月31日 (日) 04:13的最新版本
通用日期视图
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
:一个 QuerySet 对象,包含根据queryset
具有可用对象的所有年份,以降序表示为datetime.datetime
对象。
笔记
使用
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
:一个 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.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'
类似,只是它假设一周从星期一开始。 这与 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>
在本例中,您将输出周数。 请记住,使用
'W'
格式字符的 :tfilter:`date` 模板过滤器计算的周数并不总是与strftime()
和 [ X183X] 与'%W'
格式字符串。 例如,对于 2015 年,:tfilter:`date` 输出的周数比strftime()
输出的周数高 1。 :tfilter:`date` 中的'%U'
strftime()
格式字符串没有等效项。 因此,您应该避免使用 :tfilter:`date` 为WeekArchiveView
生成 URL。
DayArchiveView
- class DayArchiveView
一天存档页面,显示给定日期内的所有对象。 未来几天会抛出 404 错误,无论未来几天是否存在任何对象,除非您将
allow_future
设置为True
。祖先 (MRO)
语境
除了 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.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
显示 today 的所有对象的日存档页面。 这与 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
代表单个对象的页面。 如果对象将来有日期值,视图默认会抛出 404 错误,除非你将
allow_future
设置为True
。祖先 (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(对于存档视图)或 SingleObjectTemplateResponseMixin(对于DateDetailView):
- class BaseArchiveIndexView
- class BaseYearArchiveView
- class BaseMonthArchiveView
- class BaseWeekArchiveView
- class BaseDayArchiveView
- class BaseTodayArchiveView
- class BaseDateDetailView