Vista detallada se refiere a una vista (lógica) para mostrar una instancia de una tabla en la base de datos. Ya hemos discutido los conceptos básicos de la Vista detallada en Vista detallada – Vistas basadas en funciones Django . Las vistas basadas en clases proporcionan una forma alternativa de implementar vistas como objetos de Python en lugar de funciones. No reemplazan las vistas basadas en funciones, pero tienen ciertas diferencias y ventajas en comparación con las vistas basadas en funciones:
- La organización del código relacionado con métodos HTTP específicos (GET, POST, etc.) se puede abordar mediante métodos separados en lugar de bifurcaciones condicionales.
- Las técnicas orientadas a objetos, como mixins (herencia múltiple), se pueden usar para factorizar el código en componentes reutilizables.
Las vistas basadas en clases son más simples y eficientes de administrar que las vistas basadas en funciones. Una vista basada en funciones con toneladas de líneas de código se puede convertir en una vista basada en clases con solo unas pocas líneas. Aquí es donde entra en juego la Programación Orientada a Objetos.
Django DetailView – Vistas basadas en clases
Ilustración de cómo crear y usar la vista de detalles usando un ejemplo. Considere un proyecto llamado geeksforgeeks
que tiene una aplicación llamada geeks
.
Consulte los siguientes artículos para comprobar cómo crear un proyecto y una aplicación en Django.
Después de tener un proyecto y una aplicación, creemos un modelo del cual crearemos instancias a través de nuestra vista. en geeks/models.py
,
# import the standard Django Model # from built-in library from django.db import models # declare a new model with a name "GeeksModel" class GeeksModel(models.Model): # fields of the model title = models.CharField(max_length = 200) description = models.TextField() # renames the instances of the model # with their title name def __str__(self): return self.title
Después de crear este modelo, necesitamos ejecutar dos comandos para crear la base de datos para el mismo.
Python manage.py makemigrations Python manage.py migrate
Ahora vamos a crear algunas instancias de este modelo usando shell, ejecute form bash,
Python manage.py shell
Ingrese los siguientes comandos
>>> from geeks.models import GeeksModel >>> GeeksModel.objects.create( title="title1", description="description1").save() >>> GeeksModel.objects.create( title="title2", description="description2").save() >>> GeeksModel.objects.create( title="title2", description="description2").save()
Ahora tenemos todo listo para el back-end. Verifique que las instancias se hayan creado desde http://localhost:8000/admin/geeks/geeksmodel/
Las vistas basadas en clases configuran automáticamente todo, de la A a la Z. Solo se necesita especificar para qué modelo crear DetailView, luego DetailView basado en clases intentará automáticamente encontrar una plantilla en formato app_name/modelname_detail.html
. En nuestro caso lo es geeks/templates/geeks/geeksmodel_detail.html
. Vamos a crear nuestra vista basada en clases. en geeks/views.py
,
from django.views.generic.detail import DetailView from .models import GeeksModel class GeeksDetailView(DetailView): # specify the model to use model = GeeksModel
Ahora cree una ruta de URL para mapear la vista. En geeks/urls.py,
from django.urls import path # importing views from views..py from .views import GeeksDetailView urlpatterns = [ # <pk> is identification for id field, # slug can also be used path('<pk>/', GeeksDetailView.as_view()), ]
Crear una plantilla en templates/geeks/geeksmodel_detail.html
,
<h1>{{ object.title }}</h1> <p>{{ object.description }}</p>
Veamos qué hay en http://localhost:8000/1/
Manipular datos de contexto en DetailView
Por defecto, DetailView solo mostrará los campos de una tabla. Si uno desea modificar estos datos de contexto antes de enviarlos a la plantilla o agregar algún campo adicional, los datos de contexto pueden anularse.
en geeks/views.py
,
from django.views.generic.detail import DetailView from .models import GeeksModel class GeeksDetailView(DetailView): # specify the model to use model = GeeksModel # override context data def get_context_data(self, *args, **kwargs): context = super(GeeksDetailView, self).get_context_data(*args, **kwargs) # add extra field context["category"] = "MISC" return context
en geeks/templates/geeksmodel_detail.html
,
<h1>{{ object.title }}</h1> <p>{{ object.description }}</p> <p>{{ category }}</p>
Ahora verifique si se agrega la categoría.
Publicación traducida automáticamente
Artículo escrito por NaveenArora y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA