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 menjadi True.

Ancestors (MRO)

Konteks

Sebagai tambahan pada konteks disediakan oleh django.views.generic.list.MultipleObjectMixin (melalui django.views.generic.dates.BaseDateListView), konteks cetakan akan menjadi:

  • date_list: Sebuah obyek QuerySet mengandung semua tahun yang mempunyai obyek-obyek tersedia menurut pada queryset, diwakili sebagai obyek datetime.datetime, dalam urutan menurun.

Catatan

  • Menggunakan context_object_name awal dari latest.

  • Menggunakan template_name_suffix awal dari _archive.

  • Awalan untuk menyediakan date_list berdasarkan tahun, tetapi ini dapat dirubah menjadi bulan atau hari menggunakan atribut date_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 menjadi True.

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. Jika False, queryset None akan digunakan sebagai daftar obyek. Secara awalan, ini adalah False.

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 (melalui django.views.generic.dates.BaseDateListView), konteks cetakan akan menjadi:

  • date_list: Sebuah obyek QuerySet mengandung semua bulan yang mempunyai obyek-obyek tersedia menurut pada queryset, diwakili sebagai obyek datetime.datetime, dalam urutan menaik.

  • year: Sebuah obyek date mewakili tahun yang diberikan.

  • next_year: Sebuah obyek date mewakili hari pertama dari tahun selanjutnya menurut allow_empty dan allow_future.

  • previous_year: Sebuah obyek date mewakili hari pertama dari tahun sebelumnya, menurut allow_empty dan allow_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 menjadi True.

Ancestors (MRO)

Konteks

Sebagai tambahan pada konteks disediakan oleh MultipleObjectMixin (melalui django.views.generic.dates.BaseDateListView), konteks cetakan akan menjadi:

  • date_list: Sebuah obyek QuerySet mengandung semua hari yang mempunyai obyek-obyek tersedia di bulan yang diberikan, menurut pada queryset, diwakili sebagai obyek datetime.datetime, dalam urutan menaik.

  • month: Sebuah obyek date mewakili bulanyang diberikan.

  • next_month: Sebuah obyek date mewakili hari pertama dari bulan selanjutnya menurut allow_empty dan allow_future.

  • previous_month: Sebuah obyek date mewakili hari pertama dari bulan sebelumnya, menurut allow_empty dan allow_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 menjadi True.

Ancestors (MRO)

Konteks

Sebagai tambahan pada konteks disediakan oleh MultipleObjectMixin (melalui django.views.generic.dates.BaseDateListView), konteks cetakan akan menjadi:

  • week: Sebuah obyek date mewakili hari pertama dari minggu yang diberikan.

  • next_week: Sebuah obyek date mewakili hari pertama dari minggu selanjutnya menurut allow_empty dan allow_future.

  • previous_week: Sebuah obyek date mewakili hari pertama dari minggu sebelumnya, menurut allow_empty dan allow_future.

Catatan

  • Menggunakan template_name_suffix awal dari _archive_week.

  • Atribut week_format adalah sebuah bentuk string strptime() 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 oleh strftime() dan strptime() dengan string bentuk strptime(). untuk tahun 2015, sebagai keluaran contoh nomor minggu oleh date adalah lebih tinggi oleh satu dibandingkan ke keluarannya oleh strftime(). Tidak ada setara untuk string bentuk '%U'` strftime() di date. Karena itu, anda harus menghindari menggunakan date untuk membangkitkan URL untuk WeekArchiveView.

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 menjadi True.

Ancestors (MRO)

Konteks

Sebagai tambahan pada konteks disediakan oleh MultipleObjectMixin (melalui django.views.generic.dates.BaseDateListView), konteks cetakan akan menjadi:

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 argumen year/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 atribut template_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 menjadi True.

Ancestors (MRO)

Konteks

  • Disertakan obyek tunggal terkait dengan model ditentukan di DateDetailView.

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):

class BaseArchiveIndexView[sumber]
class BaseYearArchiveView[sumber]
class BaseMonthArchiveView[sumber]
class BaseWeekArchiveView[sumber]
class BaseDayArchiveView[sumber]
class BaseTodayArchiveView[sumber]
class BaseDateDetailView[sumber]
Back to Top