Django - Tampilan Umum

Dalam beberapa kasus, menulis pandangan, seperti yang telah kita lihat sebelumnya sangatlah berat. Bayangkan Anda membutuhkan halaman statis atau halaman daftar. Django menawarkan cara mudah untuk menyetel tampilan sederhana itu yang disebut tampilan umum.

Tidak seperti tampilan klasik, tampilan umum adalah kelas, bukan fungsi. Django menawarkan sekumpulan kelas untuk tampilan umum di django.views.generic, dan setiap tampilan umum adalah salah satu kelas itu atau kelas yang mewarisi dari salah satunya.

Ada 10+ kelas generik -

>>> import django.views.generic
>>> dir(django.views.generic)

['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView', 
   'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView', 
   'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView', 
   'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__', 
   '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 
   'detail', 'edit', 'list']

Ini dapat Anda gunakan untuk tampilan umum Anda. Mari kita lihat beberapa contoh untuk melihat cara kerjanya.

Halaman Statis

Mari publikasikan halaman statis dari template "static.html".

Static.html kami -

<html>
   <body> 
      This is a static page!!! 
   </body>
</html>

Jika kami melakukan itu dengan cara yang kami pelajari sebelumnya, kami harus mengubah myapp/views.py menjadi -

from django.shortcuts import render

def static(request):
   return render(request, 'static.html', {})

dan myapp/urls.py menjadi -

from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

Cara terbaik adalah menggunakan tampilan umum. Untuk itu, myapp / views.py kita akan menjadi -

from django.views.generic import TemplateView

class StaticView(TemplateView):
   template_name = "static.html"

Dan myapp / urls.py kami, kami akan -

from myapp.views import StaticView
from django.conf.urls import patterns

urlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)

Saat mengakses / myapp / static Anda mendapatkan -

Untuk hasil yang sama kita juga bisa, lakukan hal berikut -

  • Tidak ada perubahan di views.py
  • Ubah file url.py menjadi -
from django.views.generic import TemplateView
from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views",
   url(r'^static/',TemplateView.as_view(template_name = 'static.html')),)

Seperti yang Anda lihat, Anda hanya perlu mengubah file url.py di metode kedua.

Daftar dan Tampilkan Data dari DB

Kami akan membuat daftar semua entri dalam model Dreamreal kami. Melakukannya menjadi mudah dengan menggunakan kelas tampilan generik ListView. Edit file url.py dan perbarui sebagai -

from django.views.generic import ListView
from django.conf.urls import patterns, url

urlpatterns = patterns(
   "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal, 
      template_name = "dreamreal_list.html")),
)

Penting untuk diperhatikan saat ini adalah variabel yang melewati tampilan umum ke template adalah object_list. Jika Anda ingin menamainya sendiri, Anda perlu menambahkan argumen context_object_name ke metode as_view. Kemudian url.py akan menjadi -

from django.views.generic import ListView
from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views",
   url(r'^dreamreals/', ListView.as_view(
      template_name = "dreamreal_list.html")),
      model = Dreamreal, context_object_name = ”dreamreals_objects” ,)

Template terkait kemudian akan -

{% extends "main_template.html" %}
{% block content %}
Dreamreals:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}

Mengakses / myapp / dreamreals / akan menghasilkan halaman berikut -