Generic date views¶
Tampilan umum berdasarkan-tanggal, disediakan di django.views.generic.dates
, adalah tampilan untuk menampilkan halaman-halaman penelusuran untuk data berdasarkan-tanggal.
Catatan
Beberapa dari contoh-contoh pada halaman ini menganggap bahwa sebuah model Article
telah ditentukan sebagai berikut di 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[sumber]¶
Halaman indeks tingkat-atas menampilkan obyek "latest", berdasarkan tanggal. Obyek dengan sebuah tanggal di future tidak disertakan meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
Konteks
Sebagai tambahan pada konteks disediakan oleh
django.views.generic.list.MultipleObjectMixin
(melaluidjango.views.generic.dates.BaseDateListView
), konteks cetakan akan menjadi:date_list
: Sebuah obyekQuerySet
mengandung semua tahun yang mempunyai obyek-obyek tersedia menurut padaqueryset
, diwakili sebagai obyekdatetime.datetime
, dalam urutan menurun.
Catatan
Menggunakan
context_object_name
awal darilatest
.Menggunakan
template_name_suffix
awal dari_archive
.Awalan untuk menyediakan
date_list
berdasarkan tahun, tetapi ini dapat dirubah menjadi bulan atau hari menggunakan atributdate_list_period
. Ini juga memberlakukan ke semua tampilan subkelas.
Contoh 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", ), ]
Contoh myapp/article_archive.html:
<ul> {% for article in latest %} <li>{{ article.pub_date }}: {{ article.title }}</li> {% endfor %} </ul>
Ini akan mengeluarkan semua artikel.
YearArchiveView
¶
- class YearArchiveView[sumber]¶
Halaman arsip tahunan menampilkan semua bulan tersedia di tahun yang diberikan. Obyek-obyek dengan tanggal future tidak ditampilkan meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
- make_object_list¶
Sebuah boolean menentukan apakah mengambil daftar penuh dari obyek-obyek untuk tahun ini dan melewatkan itu ke cetakan. Jika
True
, daftar dari obyek-obyek akan dibuat tersedia ke konteks. JikaFalse
, querysetNone
akan digunakan sebagai daftar obyek. Secara awalan, ini adalahFalse
.
- get_make_object_list()¶
Menentukan jika sebuah daftar obyek akan dikembalikan sebagai bagian dari konteks. Mengembalikan
make_object_list
secara awalan.
Konteks
Sebagai tambahan pada konteks disediakan oleh
django.views.generic.list.MultipleObjectMixin
(melaluidjango.views.generic.dates.BaseDateListView
), konteks cetakan akan menjadi:date_list
: Sebuah obyekQuerySet
mengandung semua bulan yang mempunyai obyek-obyek tersedia menurut padaqueryset
, diwakili sebagai obyekdatetime.datetime
, dalam urutan menaik.year
: Sebuah obyekdate
mewakili tahun yang diberikan.next_year
: Sebuah obyekdate
mewakili hari pertama dari tahun selanjutnya menurutallow_empty
danallow_future
.previous_year
: Sebuah obyekdate
mewakili hari pertama dari tahun sebelumnya, menurutallow_empty
danallow_future
.
Catatan
Menggunakan
template_name_suffix
awal dari_archive_year
.
Contoh 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
Contoh myapp/urls.py:
from django.urls import path from myapp.views import ArticleYearArchiveView urlpatterns = [ path("<int:year>/", ArticleYearArchiveView.as_view(), name="article_year_archive"), ]
Contoh 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[sumber]¶
Halaman arsip tahunan menampilkan semua obyek di tahun yang diberikan. Obyek-obyek dengan tanggal future tidak ditampilkan meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
Konteks
Sebagai tambahan pada konteks disediakan oleh
MultipleObjectMixin
(melaluidjango.views.generic.dates.BaseDateListView
), konteks cetakan akan menjadi:date_list
: Sebuah obyekQuerySet
mengandung semua hari yang mempunyai obyek-obyek tersedia di bulan yang diberikan, menurut padaqueryset
, diwakili sebagai obyekdatetime.datetime
, dalam urutan menaik.month
: Sebuah obyekdate
mewakili bulanyang diberikan.next_month
: Sebuah obyekdate
mewakili hari pertama dari bulan selanjutnya menurutallow_empty
danallow_future
.previous_month
: Sebuah obyekdate
mewakili hari pertama dari bulan sebelumnya, menurutallow_empty
danallow_future
.
Catatan
Menggunakan
template_name_suffix
awal dari_archive_month
.
Contoh 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
Contoh 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", ), ]
Contoh 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[sumber]¶
Halaman arsip tahunan menampilkan semua obyek di minggu yang diberikan. Obyek-obyek dengan tanggal future tidak ditampilkan meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
Konteks
Sebagai tambahan pada konteks disediakan oleh
MultipleObjectMixin
(melaluidjango.views.generic.dates.BaseDateListView
), konteks cetakan akan menjadi:week
: Sebuah obyekdate
mewakili hari pertama dari minggu yang diberikan.next_week
: Sebuah obyekdate
mewakili hari pertama dari minggu selanjutnya menurutallow_empty
danallow_future
.previous_week
: Sebuah obyekdate
mewakili hari pertama dari minggu sebelumnya, menurutallow_empty
danallow_future
.
Catatan
Menggunakan
template_name_suffix
awal dari_archive_week
.Atribut
week_format
adalah sebuah bentuk stringstrptime()
digunakan untuk mengurai nomor minggu. Nilai-nilai berikut adalah didukung:'%U'
: Berdasarkan pada sistem minggu Amerika Serikat dimana minggu dimulai pada hari Minggu. Ini adalah nilai awalan.'%W'
: Mirip pada'%U'
, kecuali itu menganggap bahwa minggu dimulai pada hari Senin. Ini tidak sama seperti nomor minggu ISO 8601.'%V'
: ISO 8601 week number where the week begins on Monday.
Contoh 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
Contoh 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", ), ]
Contoh 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>
Di contoh ini, anda mengeluarkan nomor minggu. Harap diingat bahwa nomor minggu dihitung oleh penyaring cetakan
date
dengan karakter bentuk'W'
tidak selalu sama ketika itu dihitung olehstrftime()
danstrptime()
dengan string bentukstrptime()
. untuk tahun 2015, sebagai keluaran contoh nomor minggu olehdate
adalah lebih tinggi oleh satu dibandingkan ke keluarannya olehstrftime()
. Tidak ada setara untuk string bentuk '%U'`strftime()
didate
. Karena itu, anda harus menghindari menggunakandate
untuk membangkitkan URL untukWeekArchiveView
.
DayArchiveView
¶
- class DayArchiveView[sumber]¶
Halaman arsip tahunan menampilkan semua obyek di hari yang diberikan. Hari-hari d masa depan melemparkan sebuah kesalahan 404, terlepas dari apapun setiap obyek ada untuk hari akan datang, meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
Konteks
Sebagai tambahan pada konteks disediakan oleh
MultipleObjectMixin
(melaluidjango.views.generic.dates.BaseDateListView
), konteks cetakan akan menjadi:day
: Sebuah obyekdate
mewakili hari diberikan.next_day
: Sebuah obyekdate
mewakili hari selanjutnya, menurutallow_empty
danallow_future
.previous_day
: Sebuah obyekdate
mewakili hari sebelumnya, menurutallow_empty
danallow_future
.next_month
: Sebuah obyekdate
mewakili hari pertama dari bulan selanjutnya menurutallow_empty
danallow_future
.previous_month
: Sebuah obyekdate
mewakili hari pertama dari bulan sebelumnya, menurutallow_empty
danallow_future
.
Catatan
Menggunakan
template_name_suffix
awal dari_archive_day
.
Contoh 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
Contoh 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", ), ]
Contoh 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[sumber]¶
Halaman arsip hari menampilkan semua obyek untuk today. Ini sebenarnya sama seperti
django.views.generic.dates.DayArchiveView
, kecuali tanggal hari ini digunakan daripada argumenyear
/month
/day
.Ancestors (MRO)
Catatan
Menggunakan
template_name_suffix
awal dari_archive_today
.
Contoh 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
Contoh myapp/urls.py:
from django.urls import path from myapp.views import ArticleTodayArchiveView urlpatterns = [ path("today/", ArticleTodayArchiveView.as_view(), name="archive_today"), ]
Dimana contoh cetakan untuk
TodayArchiveView
?Tampilan ini menggunakan secara awal cetakan sama seperti
DayArchiveView
, yang mana di contoh sebelumnya. Jika anda butuh cetakan berbeda, setel atributtemplate_name
menjadi nama dari cetakan baru.
DateDetailView
¶
- class DateDetailView[sumber]¶
Sebuah halaman mewakili obyek perseorangan. Jika obyek mempunyai nilai tanggal di masa depan, tampilan akan melempar sebuah kesalahan 404 secara awalan, meskipun anda menyetel
allow_future
menjadiTrue
.Ancestors (MRO)
Konteks
Disertakan obyek tunggal terkait dengan
model
ditentukan diDateDetailView
.
Catatan
Menggunakan
template_name_suffix
awal dari_detail
.
Contoh 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", ), ]
Contoh myapp/article_detail.html:
<h1>{{ object.title }}</h1>
Catatan
Semua dari tampilan umum didaftarkan diatas telah mencocokkan tampilan Base
yang hanya berbeda di itu mereka tidak menyertakan MultipleObjectTemplateResponseMixin
(untuk tampilan arsip) atau SingleObjectTemplateResponseMixin
(untuk DateDetailView
):