بخش های اصلی

آموزش Django

Django – Viewهایِ Generic

گاهی نوشتن viewها با همان روشی که در بخش های قبلی استفاده کردیم، بسیار سخت خواهد بود. فرض کنین به یه صفحه ی static یا یه صفحه  از نوع لیست نیاز دارین. Django برای ایجاد چنین viewهای ساده ای یک روش ساده به نامِ generic views ارائه میده.

برخلاف viewهای کلاسیک، viewهایِ generic کلاس هستند نه تابع. Django برای viewهایِ generic، در django.views.generic، مجموعه ای از کلاس ها را ارائه میده و هر view genericای یکی از آن کلاس هاست یا کلاسیِه که از یکی از آن ها ارث بری می کنه.

در ادامه بیش تر از 10 کلاسِ generic را مشاهده می کنین:

>>> 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']

این کلاس برای viewهای generic قابل استفاده ست. در ادامه برای آشنایی با نحوه ی کارِ این کلاس، تعدادی مثال آورده ایم.

صفحه هایِ Static

در ادامه یک صفحه ی static از templateای به نامِ “static.html” ایجاد می کنیم.

static.html ما –

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

اگه این صفحه را به روشی که پیش تر یاد گرفتین ایجاد کنین، باید myapp/views.py را بصورت زیر تغییر بدین –

from django.shortcuts import render

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

و myapp/urls.py را هم بصورت زیر تغییر بدین –

from django.conf.urls import patterns, url

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

بهترین روش، استفاده از viewهایِ generic است. برای این کار، myapp/views.py بصورت زیر تغییر می کنه –

from django.views.generic import TemplateView

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

و our myapp/urls.py نیز بصورت زیر تغییر می کنه –

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

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

اگه به /myapp/static برین، خروجی بصورت زیر خواهد بود –

static page

برای گرفتن نتیجه ای مشابه، می توانید کارهای زیر را هم انجام بدین –

  •  views.py را تغییر ندین
  •  url.py را بصورت زیر تغییر بدین –
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')),)

همانطور که مشاهده می کنین، فقط باید فایلِ url.py را در متدِ دوم، تغییر بدین.

لیست کردن و نمایش داده ها از پایگاه داده

در این قسمت، تمام ورودی هایِ مدلِ Dreamreal را لیست می کنیم. انجام این کار با استفاده از کلاسِ generic view بسیار ساده ست. فایلِ url.py را بصورت زیر تغییر داده و به روز رسانی کنین –

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")),
)

این نکته ی مهم را به خاطر داشته باشین که متغیری که توسطِ generic view به object_list پاس داده شده، object_list است. اگه می خواین نام آن را خودتان تعیین کنین، باید یک آرگومانِ context_object_name به متدِ as_view اضافه کنین. بعد از انجام این کارها، url.py بصورت زیر خواهد بود –

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 تخصیص داده شده نیز بصورت زیر خواهد بود –

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

اگه به /myapp/dreamreals/ برین، صفحه ای بصورت زیر مشاهده خواهید کرد –

list display data from db

مبحث آموزشی

آموزش Django

Learn Django

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد