Blog
Datos dinámicos en las plantillas
- Publicado por: Rafael Fernandez
- Categoría: Curso Desarrollo Web Django
-Aqui entenderemos los pasos a seguir para que los posts se puedan mostrar en una plantilla de HTML utilizando los Querysets.
Se cuentan con varios pasos ya hechos como deben ser, como por el ejemplo con el modelo Post que ya está determinado en models.py, también a post_list en views.py y la plantilla agregada.
¿Solos hace falta un detalle, cómo se podrá hacer para que los artículos (posts) se muestren en una plantilla HTML?
Ese es el propósito, entonces inicialmente lo que hay que hacer inicialmente es seleccionar el contenido, dicho contenido está guardado como modelo en la base de datos, y esto es lo que se va a mostrar apropiadamente en una plantilla, básicamente esa es la función de Views.
Views relaciona los modelos con las plantillas. Entonces en view post_list requerirá los modelos que se quieran mostrar y los trasladará a dicha plantilla. Literalmente en View se toma la decisión de que modelo se va a presentar en una plantilla. ¿Cómo se logra esto? Sencillo. Se dará inicio al archivo blog/views.py y por los momentos la view post_list deberá mostrarse así:
from django.shortcuts import render</pre> def post_list(request): <pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;"> return render(request, 'blog/post_list.html', {})</span>
Recordar cuando se hablaba de incluir códigos en diferentes archivos
Es tiempo, ahora hay que incluir el modelo que determinamos en el archivo que se tiene con el nombre de models.py. se tendrá que añadir una línea from .models import Post de la siguiente manera:
from django.shortcuts import render
from .models import Post
Recordar que el punto (.) después de from muestra el directorio actual o la aplicación actual.
Ya teniendo a views.py y models.py en el mismo directorio lo siguiente que hay que hacer es usar el nombre del archivo (sin .py).
Además, vamos a importar el nombre del modelo artículo (post)
Entonces, ¿Qué es lo siguiente? Para conseguir dichas publicaciones del modelo Post, se va a requerir algo ya familiar llamado QuerySet. Se explicará en la siguiente parte:
QuerySet
Por supuesto, de que ya se está familiarizado con las funciones de QuerySets. Explicamos de ello en la guía anterior: Django ORM (QuerySets).
El objetivo en estos momentos es poder establecer unas listas de entradas del blog que han sido publicadas y ordenadas por published_date (fecha de publicación), ¿Correcto? ¡Esto también ya se hizo en el capítulo anterior de QuerySets!
Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
Se va a trasladar este bloque de código en el archivo que tiene como nombre blog/views.py y añadiéndole a la función:
def post_list(request):</pre> from django.shortcuts import render from django.utils import timezone from .models import Post def post_list(request): posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') <pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;"> return render(request, 'blog/post_list.html', {})</span>
Es fácil darse cuenta de que se ha elaborado una variable en el QuerySet: posts. Se determinará con el nombre del QuerySet. Ya que de ahora en adelante hay que referirse al QuerySet con ese nombre.
Ya para finalizar se debe trasladar QuerySet posts a la plantilla, hay que a darse cuenta de cómo se verá en la siguiente parte.
Antes que todo, ya se sabe que en la función render se tiene parámetro request (es todo lo que se recibe del usuario vía a Internet) y el ‘blog/post_list.html’ como plantilla. El ultimo parámetro se muestra como: {} , dicho campo está hecho para que se pueda añadir algunas cosas y para que la plantilla tome uso se eso. Se va a necesitar nombrarlos, en este caso se seguirá llamando ‘posts’. Y se debería observar de la siguiente forma:
{‘posts’: posts}. Detalla que cuando se escribe la parte de : está entre comillas ”.
El archivo blog/views.py se deberá observar similar a lo siguiente a mostrar:
from django.shortcuts import render</pre> from django.utils import timezone <pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;"> from .models import Post</span> def post_list(request):</pre> posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') <pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;"> return render(request, 'blog/post_list.html', {'posts': posts})</span>
Bien, ya se ha finalizado con la plantilla y se publicó el QuerySet.