Cómo Funcionan las Rutas en Django

Django utiliza un sistema basado en patrones para definir las rutas de las aplicaciones web. Estas rutas se configuran en archivos llamados urls.py y permiten enlazar las URLs con las vistas.

En Django, las rutas se definen en el archivo urls.py. La función principal utilizada es path, y opcionalmente, re_path para expresiones regulares.

Estructura de una ruta básica

python
from django.urls import path
from . import views

urlpatterns = [

  path('ruta/', views.mi_vista, name='nombre_de_la_ruta'),

]
  Definiciones

  • ruta/: Define el patrón de la URL.
  • views.mi_vista: Especifica la vista que se ejecutará cuando se acceda a esta URL.
  • name: Permite referenciar la ruta en plantillas o vistas.

Configurar URLs en una aplicación

  • Crea un archivo urls.py en tu aplicación (si no existe).
  • Define las rutas locales.
python
from django.urls import path
from . import views

urlpatterns = [

  path('', views.inicio, name='inicio'),
  path('about/', views.about, name='about'),

]

Incluye las rutas locales en el proyecto principal. En el archivo urls.py del proyecto:

python
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('mi_app.urls')),
]

Ruta simple

python
urlpatterns = [
  path('saludo/', views.saludo, name='saludo'),
]

Vista en views.py

python
from django.http import HttpResponse

def saludo(request):

  return HttpResponse("¡Hola, Mundo!")

Ruta con parámetros

python
urlpatterns = [
  path('saludo/<str:nombre>/', views.saludo_personalizado, name='saludo_personalizado'),
]

Vista en views.py

python
def saludo_personalizado(request, nombre):

  return HttpResponse(f"¡Hola, {nombre}!")

Ruta con expresiones regulares

Usando re_path:

python
from django.urls import re_path

urlpatterns = [

  re_path(r'^numero/(?P<numero>[0-9]+)/$', views.mostrar_numero, name='mostrar_numero'),
]

Vista en views.py

python
def mostrar_numero(request, numero):

  return HttpResponse(f"El número es: {numero}")

Rutas agrupadas

Cuando tienes varias rutas relacionadas:

python
urlpatterns = [

  path('blog/', views.blog_list, name='blog_list'),

  path('blog/<int:id>/', views.blog_detail, name='blog_detail'),

]

Vistas en views.py

python
def blog_list(request):
  return HttpResponse("Lista de publicaciones.")

def blog_detail(request, id):
  return HttpResponse(f"Detalles de la publicación con ID: {id}")

Uso de path y re_path

  • path: Usa rutas legibles y simples.
  • re_path: Utiliza expresiones regulares para patrones avanzados.

Ejemplo combinado:

python
from django.urls import path, re_path

urlpatterns = [

  path('simple/', views.simple, name='simple'),

  re_path(r'^regex/(?P<slug>[-w]+)/$', views.regex_example, name='regex_example'),

]