English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。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.
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 −