Читать книгу Django 2 - Antonio Melé - Страница 52
Añadir comentarios a la plantilla de detalle de artículos
ОглавлениеUna vez creada la funcionalidad para gestionar comentarios para un artículo, es necesario adaptar la plantilla post/detail.html para:
• Mostrar el total de comentarios relacionados con artículos.
• Mostrar la lista de comentarios.
• Mostrar un formulario a los usuarios para añadir un comentario nuevo.
Lo primero que hará será añadir el número total de comentarios. Para ello editará la plantilla post/detail.html y añadirá el siguiente contenido al bloque content:
Para ello está usando el ORM de Django en la plantilla, ejecutando el método count() del QuerySet comments. El lenguaje de plantillas de Django no hace uso de paréntesis a la hora de llamar a métodos o funciones. El tag {% with %} permite asignar un valor a una nueva variable que estará disponible para usar dentro del bloque, hasta la etiqueta {% endtag %}.
La etiqueta de plantilla {% with %} es útil para evitar múltiples ejecuciones costosas dentro de la misma plantilla, por ejemplo, sobre la base de datos.
Utilizará el filtro de plantilla pluralize para mostrar el plural de la palabra comment en función del valor de total_comments. Este filtro funciona para múltiples idiomas, incluido el español. Los filtros de plantilla toman el valor de la variable a la que se aplican y la utilizan como entrada para generar una salida. Esto se tratará en el capítulo 3, Extensiones para el blog.
El filtro de plantilla pluralize devuelve una cadena con la letra “s” si el valor de entrada es diferente de 1. Los posibles textos renderizados serán 0 comments, 1 comment o N comments. Django incluye múltiples etiquetas y filtros de plantilla que nos ayudan a mostrar la información del modo en que necesitará.
A continuación, incluirá la lista de comentarios. Para ello añadirá en la plantilla post/detail.html las siguientes líneas:
La etiqueta {% for %} permite iterar sobre los comentarios. En caso de que la lista comments esté vacía, mostrará un comentario por defecto indicando al usuario que todavía no hay comentarios. Con la variable {{ forloop. counter }} enumerará los comentarios. Esta variable contiene un contador de bucle, indicando la iteración en que se encuentra. Por último, se muestra el nombre del usuario que realizó el comentario, la fecha y las primeras letras del cuerpo del comentario.
Para terminar, queda por mostrar un mensaje indicando que todo ha ido correctamente en caso de procesar bien el formulario, o el formulario en sí. Va a añadir las siguientes líneas al código anterior:
En caso de que el objeto new_comment exista, se muestra un mensaje satisfactorio indicando que el comentario se ha creado correctamente. En caso contrario, se muestra el formulario con un elemento párrafo <p> por cada campo, incluyendo el token CSRF necesario para las acciones POST. Va a abrir http://127.0.0.1:8000/blog/ en el navegador y pulsar sobre el título de un artículo para ver la página de detalle. Debería ver algo similar a esto:
Si añade varios comentarios a través del formulario, estos deberían aparecer bajo el artículo en orden cronológico:
Va a ir a http://127.0.0.1:8000/admin/blog/comment/ en el navegador. Verá la página de administración con la lista de comentarios que ha creado. Seleccione uno para editarlo. Desactive el check Active y pulse sobre el botón Save. El sistema le redirigirá a la lista de comentarios, y podrá ver que la columna Active se encuentra desactivada para el comentario que acaba de modificar. La pantalla debería verse de un modo similar a:
Si vuelve a la página de detalle del artículo, podrá ver que el comentario desactivado no se muestra. Tampoco se tiene en cuenta para la contabilización de comentarios. Gracias al campo active, puede desactivar comentarios inapropiados y evitar mostrarlos en los artículos.