English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。 Django还提供了一种简单的方法来设置这些简单的视图被称为泛型视图。
不同于传统的视图,一般的视图是一个类但没有函数。Django还提供了一组类 django.views.generic 泛型视图,以及每一个普通视图是这些类或从它们中的一个类继承的。
有10+泛型类−
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 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 −
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 This is a static page!!! </body> </html>
如果我们这样做,按照以前学过的方式,我们将不得不改变 myapp/views.py −
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 from django.shortcuts import render def static(request): return render(request, 'static.html', {})
myapp/urls.py será como sigue -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 from django.conf.urls import patterns, url urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)
La mejor manera es usar vistas genéricas. Para esto, nuestro myapp/views.py se convertirá en -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 from django.views.generic import TemplateView class StaticView(TemplateView): template_name = "static.html"
Y nuestro myapp/urls.py será como sigue -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 from myapp.views import StaticView from django.conf.urls import patterns urlpatterns = patterns("myapp.views", url(r'^static/, StaticView.as_view()),) , StaticView.as_view()),)
Al acceder /myapp/static se convertirá en -
Con el mismo resultado, también podemos realizar las siguientes operaciones -
No es necesario modificar views.py Cambia el archivo url.py a -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 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')),)
Como puedes ver, solo necesitas cambiar el segundo método en el archivo url.py.
Queremos listar todos los elementos en el modelo Dreamreal. De esta manera, el uso de la clase de vista genérica ListView se vuelve fácil. Edita el archivo url.py y actualízalo -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 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")), )
Es importante prestar atención, en este punto, la variable se convierte de vista genérica a plantilla object_list. Si deseas usar tu propio nombre, necesitarás agregar un parámetro context_object_name al método as_view. Luego, url.py se convierte en -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 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",)
Luego la plantilla asociada se convertirá en -
# Nombre de archivo : example.py # Derechos de autor : 2020 Por w3codebox # Autor por : es.oldtoolbag.com # Fecha : 2020-08-08 {% extends "main_template.html" %} {% block content %} Dreamreals:<p> {% for dr in object_list %} {{dr.name}}</p> {% endfor %} {% endblock %}
Acceder /myapp/dreamreals/ Se producirá la siguiente página -