Los listados de información son un elemento primordial en cualquier aplicación, ya sea de tipo blog, de productos, para realizar un CRUD, etc; todo esto forma parte de un misma lógica y estructura que es cargar el listado de elementos y puede que bajo un criterio en particular (que estén aprobados, paginados etc.) y vamos a ver cómo podemos crear una vista o template de listados empleando Django.
Vamos a partir de la entrada anterior en la cual ya creamos ejecutamos la migración a nuestra base de datos MySQL; por lo tanto, recuerda que para crear la migración tuvimos que tener creado un modelo que es parte de nuestro MTV.
Obtener todos los registros de la base de datos con el ORM de Django (all())
Así que; lo primero que necesitamos es poder obtener todos los elementos; para esto podemos emplear el ORM que nos provee Django que en conjunto con el modelo podemos realizar cualquier operación CRUD que en este caso nos interesa la operación de solo lectura.
Vamos a ir a nuestro archivo de vistas llamado views de nuestra aplicación firstApp
y vamos a crear una nueva función llamada index
:
def index(request):
Y lo primero que vamos a hacer es obtener los registros; es decir, los comentarios para eso tenemos que cargar el modelo que definimos anteriormente para eso en este mismo archivo de vista (recuerda que el archivo de models
se encuentra en la misma app):
from .models import Comment
Y ahora desde la función que creamos anteriormente simplemente tenemos que referir al modelo que cargamos; es decir, la clase:
comments = Comment.objects.all()
Aquí como mencionamos, referencia nos la clase modelo llamada Comment
, luego él objects seguido del método tipo CRUD que queramos emplear que en este caso como queremos obtener todos los registros tenemos que emplear el método llamado all:
Y con esto obtenemos todos los registros; ahora simplemente tenemos que pasarlos a la vista; para eso podemos emplear la función llamada tender como hicimos anteriormente con los parámetros usuales que serían:
- El request
- La página HTML o template
- Un diccionario con los datos que vamos a pasar a la vista.
return render(request,'index.html',{'comments' : comments })
Finalmente, el código queda de la siguiente forma:
from .models import Comment
def index(request):
comments = Comment.objects.all()
return render(request,'index.html',{'comments' : comments })
El template (Vista HTML), iterar todos los registros
Luego, vamos a crear un template dentro de fistApp
que recuerda que viene siendo la vista en HTML y una carpeta llamada templates que tienes que crear que vamos a llamar como index.html o el nombre que tú quieras que tenga:
firstProject\firstApp\templates\index.html
Este template, vamos a colocar una página HTML básica y simplemente una directiva llamada for, que funciona como cualquier ciclo for en cualquier lenguaje de programación.
Como puedes ver, recibe un objeto iterable que en este caso sería la colección de comentarios y luego los queremos imprimir por pantalla; para imprimir un valor por pantalla simplemente tenemos que emplear las dobles llaves:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
</head>
<body>
{% for c in comments %}
<div>
<p>
{{ c.text }} - {{ c.date_posted }}
</p>
</div>
{% endfor %}
</body>
</html>
Para la directiva for, tienes que emplear las etiquetas lógicas que son las que están formadas por una llave y un porcentaje.
Crear una ruta para la página de listado
Ahora ya tenemos casi todo listo, vamos a crear la ruta en el archivo llamado (dentro de la aplicación que tambien tienes que crear) urls.py
dentro de la aplicación firstApp
:
firstProject\firstApp\urls.py
app_name='comment'
urlpatterns = [
path('', views.index, name='index'),
]
Y recuerda cargar el archivo anterior (el de las rutas) dentro de tu proyecto; para eso:
firstProject\firstProject\urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('fisrtApp/', include('firstApp.urls'))
]
Como puedes ver, en el archivo de urls de la aplicación, simplemente registramos una ruta, sin path ''. que sea resuelta por la función de index del archivo index.py
y le colocamos un nombre de manera opcional. Luego, registramos TODAS las rutas (en este caso solamente una) de la aplicación a nivel de proyecto, para eso las incluimos mediante la función include de Django.
Y con esto, si entramos en la ruta anterior:
Ya tenemos nuestro listado.
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter