English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Viste generiche di Django

在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。Django还提供了一种简单的方法来设置这些简单的视图被称为泛型视图。

不同于传统的视图,一般的视图是一个类但没有函数。Django还提供了一组类 django.views.generic 泛型视图,以及每一个普通视图是这些类或从它们中的一个类继承的。

有10+泛型类−

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
>>> 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'

你可以使用泛型视图。让我们来看一些实例来看看它是如何工作的。

静态网页

让我们从“static.html”模板发布静态页面。

我们的 static.html −

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
<html>
    <body> 
       This is a static page!!! 
    </body>
 </html>

如果我们这样做,按以前学过的方式,我们将不得不改变 myapp/views.py −

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.shortcuts import render
 def static(request):
    return render(request, 'static.html', {})

myapp/urls.py sarà così -

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

Il modo migliore è utilizzare le viste generiche. Per questo, il nostro myapp/views.py diventerà così -

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from django.views.generic import TemplateView
 class StaticView(TemplateView):
    template_name = "static.html"

E il nostro myapp/urls.py sarà così -

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
from myapp.views import StaticView
 from django.conf.urls import patterns
 urlpatterns = patterns("myapp.views", (r'^static/', StaticView.as_view()),) , StaticView.as_view()),)

Quando si accede a /myapp/static si ottiene -

Per ottenere lo stesso risultato, possiamo anche eseguire le seguenti operazioni -

Non è necessario modificare il file views.py        Modifica il file url.py come segue -    

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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')),)

Come puoi vedere, devi solo cambiare il secondo metodo nel file url.py.

da elencare e visualizzare i dati del database

Dobbiamo elencare tutti gli elementi del modello Dreamreal. In questo modo, l'uso della vista generica ListView diventa facile. Modifica il file url.py e aggiornalo -

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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")),
 )

È importante notare che, in questo punto, le variabili passano attraverso la vista generica a un template di object_list. Se desideri il tuo nome, dovrai aggiungere un parametro context_object_name all' metodo as_view. Poi url.py diventa -

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
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",)

Poi il template associato diventerà −

# Nome del file: example.py
# Copyright: 2020 Da w3codebox
# Autore: it.oldtoolbag.com
# Data: 2020-08-08
{% extends "main_template.html" %}
 {% block content %}
 Dreamreals:<p>
 {% for dr in object_list %}
 {{dr.name}}</p>
 {% endfor %}
 {% endblock %}

L'accesso a /myapp/dreamreals/ produrrà la seguente pagina −