Читать книгу Django 2 - Antonio Melé - Страница 41

Usar vistas basadas en clase

Оглавление

Las vistas de tipo basadas en clase son una alternativa para implementar vistas como objetos Python en vez de funciones. Mientras que una vista es un elemento al que se puede llamar y que toma una solicitud web y devuelve una respuesta, también se pueden definir vistas como métodos de clase. Django aporta clases base para poder hacerlo de forma sencilla. Todas ellas heredan de la clase View, la cual interactúa con el envío y recepción de contenido HTTP y otras funcionalidades comunes.

Las vistas basadas en clase ofrecen algunas ventajas frente a las vistas de función:

• Permiten organizar el código según métodos HTTP, como GET, POST o PUT, en métodos de clase separados, en vez de usar sentencias condicionales.

• Permiten utilizar herencia múltiple para crear vistas reutilizables (también conocidas como mixins).

Para obtener más información, la documentación de Django ofrece una introducción a las vistas basadas en clase en https://docs.djangoproject.com/en/2.0/topics/class-based-views/intro/.

Se va a cambiar la vista post_list para que funcione como una vista basada en clase usando la clase ListView de Django. Esta clase permite listas de objetos de cualquier tipo.

Edite el fichero views.py de la aplicación blog y añada las siguientes líneas:


Esta vista basada en clase es análoga a la vista previa post_list. En el código anterior ha especificado a ListView lo siguiente:

• Utiliza un QuerySet específico en vez de utilizar el que devuelve todos los objetos. En vez de definir el atributo queryset, podría haber especificado model = Post y Django hubiera construido el QuerySet genérico Post.objects.all() por usted.

• El nombre de la variable de contexto que contiene todos los elementos es posts. Si no se especifica nada, el nombre por defecto es object_list.

• Que cada página contenga tres elementos.

• La plantilla que debe utilizar para renderizar la página, sino ListView utilizará la plantilla por defecto blog/post_list.html.

Queda por modificar el fichero urls.py de la aplicación blog. Comente el patrón de post_list y añada un nuevo patrón de URL para la clase PostListView del siguiente modo:


Para poder mantener la paginación en funcionamiento, es necesario pasar a la plantilla el objeto de página correcto. La vista genérica ListView de Django pasa la página seleccionada en una variable llamada page_obj, por lo que hay que editar la plantilla post/list.html de acuerdo con dicho nombre. Para ello realizará la siguiente modificación:


Para verificar que todo funciona correctamente del mismo modo que lo hacía la vista post_list, abra http://127.0.0.1:8000/blog/ en el navegador. Este es un ejemplo sencillo de una vista basada en clase que utiliza una clase genérica provista por Django. Se profundizará más sobre vistas basadas en clase en el capítulo 10, Construir una plataforma E-Learning, y en capítulos sucesivos.

Django 2

Подняться наверх