# dokumentasi Django 2.0.8

# 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`

  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)

  - `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`

  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`

  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)

  - `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`

    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`

  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)

  - `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`

  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`

  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)

  - `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`

  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.

  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`

  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)

  - `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`

  Konteks

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

  - `day`: Sebuah obyek `date` mewakili hari diberikan.
  - `next_day`: Sebuah obyek `date` mewakili hari selanjutnya, menurut `allow_empty` dan `allow_future`.
  - `previous_day`: Sebuah obyek `date` mewakili hari sebelumnya, menurut `allow_empty` dan `allow_future`.
  - `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_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`

  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)

  - `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`

  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`

  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)

  - `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`

  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`

class `BaseYearArchiveView`

class `BaseMonthArchiveView`

class `BaseWeekArchiveView`

class `BaseDayArchiveView`

class `BaseTodayArchiveView`

class `BaseDateDetailView`