Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Visualización (CRUD) Desarrollo con el framework Django

Ya que tenemos la lista de artículos funcionando, ahora es momento de aprender a mostrar información detallada de cada uno. En esta lección vamos a ver cómo configurar rutas que reciban parámetros dinámicos (como el ID de un artículo), cómo capturar ese valor en una vista y cómo mostrar el contenido correspondiente usando plantillas.

¿Qué es una ruta dinámica?

En Django, una ruta dinámica es una URL que incluye una parte variable, como un número que representa el ID de una entidad (en este caso, un artículo).

Así, en lugar de tener rutas fijas como /articles/1/ o /articles/100/, podemos crear una sola ruta que funcione para cualquier ID:

# urls.py

from django.urls import path
from codica_django_blog.article.views import IndexView, ArticleView

urlpatterns = [
    path('', IndexView.as_view()),
    path('<int:id>/', ArticleView.as_view()),  # Ruta dinámica
]

Aquí estamos diciendo: “Cuando se reciba una URL que termine en un número, como /1/ o /42/, ejecutar la vista ArticleView y pasarle ese número como parámetro llamado id.”

Ejemplos de URLs que esta ruta acepta:

/articles/1/
/articles/100/

¿Cómo capturamos ese ID en la vista?

Ahora que la ruta le cede el ID a la vista, tenemos que capturarlo y usarlo para buscar el artículo en la base de datos.

# views.py

from django.shortcuts import render, get_object_or_404
from django.views import View
from codica_django_blog.article.models import Article

class ArticleView(View):

    def get(self, request, *args, **kwargs):
        # kwargs es un diccionario con los parámetros que vienen de la URL
        # Extraemos el ID del parámetro 'id'
        article = get_object_or_404(Article, id=kwargs['id'])

        return render(request, 'articles/show.html', context={
            'article': article,
        })

Aquí pasa algo muy útil: Django guarda todos los parámetros que vienen desde la URL en un diccionario llamado kwargs. Podemos acceder a ellos usando el nombre que le dimos al parámetro en la ruta, en este caso, id.

¿Por qué usamos get_object_or_404?

Alternativas como Article.objects.get(id=kwargs['id']) funcionan, pero si ese artículo no existe, Django lanza un error que no es el más claro. En cambio, con get_object_or_404, si el artículo no se encuentra, Django devuelve automáticamente una página de error 404. Así mantenemos el flujo de la aplicación limpio y profesional sin necesidad de escribir código extra para manejar errores.

¿Qué pasa si tengo más de un parámetro en la URL?

Django también soporta rutas con múltiples parámetros dinámicos. Por ejemplo, para ver los comentarios de un artículo:

# urls.py

from codica_django_blog.article.views import ArticleCommentsView

urlpatterns = [
    # ...
    path('<int:article_id>/comments/<int:id>/', ArticleCommentsView.as_view()),
]

Aquí estamos pasando dos valores: el ID del artículo y el ID del comentario.

En la vista, seguiríamos accediendo a ellos con kwargs:

# views.py

from django.views import View
from django.shortcuts import render, get_object_or_404
from codica_django_blog.article.models import Comment

class ArticleCommentsView(View):

    def get(self, request, *args, **kwargs):
        # Buscamos el comentario correspondiente al artículo
        comment = get_object_or_404(Comment, id=kwargs['id'], article__id=kwargs['article_id'])

        return render(request, 'articles/comment.html', context={
            'comment': comment,
        })

Usamos un filtro doble: buscamos el comentario con el ID correcto que también pertenezca al artículo indicado. Así nos aseguramos de que todo está relacionado correctamente.

Mostrar el artículo en la plantilla

Finalmente, como ya hemos hecho anteriormente, podemos mostrar la información del artículo usando plantillas de Django:

<!-- templates/articles/show.html -->

{% extends "base.html" %}

{% block content %}
    <h1>{{ article.name }}</h1>
    <div>{{ article.body }}</div>
{% endblock %}
  • {{ article.name }} muestra el título del artículo.
  • {{ article.body }} muestra el contenido.

Django se encarga de reemplazar esas variables con los datos reales que le pasamos desde la vista.


Resumen

  • Una ruta dinámica en Django permite capturar parámetros directamente desde la URL, como el ID de un artículo.
  • Los parámetros de la ruta llegan a la vista dentro del diccionario kwargs. Se accede a ellos por su nombre.
  • La función get_object_or_404 intenta obtener un objeto del modelo. Si no lo encuentra, devuelve una página 404 automáticamente.
  • Podemos crear rutas con varios parámetros, y esos valores se reciben con sus respectivos nombres en la vista.
  • Para mostrar los datos en HTML, usamos plantillas con variables incrustadas (por ejemplo {{ article.name }}).

Trabajo independiente

  1. Realiza todos los pasos de la teoría. .
  2. Asegúrate de que al solicitar la página /articles/ se muestre el artículo específico
  3. Haz que el nombre del artículo en la lista de artículos sea un enlace al artículo específico.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY