3.6 Parámetros en las Rutas¶
Introducción¶
En Django, las rutas permiten definir URLs que se vinculan a vistas específicas. A menudo, necesitamos parámetros en las rutas para hacerlas más dinámicas y que puedan responder a diferentes entradas. Los parámetros en las rutas permiten capturar valores directamente desde la URL, como identificadores de objetos, fechas, edades, nombres, entre otros.
Definición
Un parámetro en una ruta es una parte de la URL que se pasa como variable a una vista. Estos parámetros pueden ser valores como texto, números, fechas, etc., y nos permiten crear URLs dinámicas.
1. ¿Cómo se definen los parámetros en las rutas?¶
Para definir un parámetro en una ruta de Django, usamos la sintaxis de tipo <tipo:variable> dentro de la ruta en urls.py. Los tipos de parámetros más comunes son:
int: Para números enteros.float: Para números decimales (el separador decimal es el punto.).str: Para cadenas de texto.slug: Para cadenas con caracteres alfanuméricos y guiones.uuid: Para identificadores únicos universales (UUID).date: Para fechas (en formatoYYYY-MM-DD).
Ejemplo de parámetros en las rutas¶
1.1 Ruta con un parámetro entero¶
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('articulo/<int:id>/', views.articulo, name='articulo'),
]
Aquí, el parámetro id es un número entero que Django pasará a la vista articulo. Si se accede a la URL http://midominio.com/articulo/1, el valor de id será 1.
1.2 Ruta con un parámetro decimal¶
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('producto/<float:precio>/', views.producto, name='producto'),
]
precio es un número decimal. Si se accede a la URL http://midominio.com/producto/19.99, el valor de precio será 19.99.
1.3 Ruta con un parámetro de texto¶
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('usuario/<str:nombre>/', views.usuario, name='usuario'),
]
Aquí, el parámetro nombre es una cadena de texto. Si se accede a la URL http://midominio.com/usuario/juan, el valor de nombre será juan.
2. Añadiendo rutas con parámetros a nuestra aplicación¶
Vamos a añadir dos rutas a nuestro proyecto para saludar y verificar la edad de una persona. Empezaremos desde el archivo urls.py y crearemos las vistas correspondientes.
2.1 Ruta /adulto/edad¶
Queremos una ruta que nos diga si una persona es mayor de edad o no, en función de la edad que se pase como parámetro.
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('adulto/<int:edad>/', views.adulto, name='adulto'),
]
En este caso, el parámetro edad se espera como un número entero.
Vista en views.py:
1 2 3 4 5 6 7 8 | |
- Si se accede a la URL
http://localhost:8000/adulto/20, el valor deedadserá20y la respuesta será "Eres mayor de edad". - Si se accede a la URL
http://localhost:8000/adulto/16, la respuesta será "No eres mayor de edad".
2.2 Ruta /saludo/nombre¶
Queremos una ruta que salude a la persona usando su nombre. En este caso, el parámetro será una cadena de texto.
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('saludo/<str:nombre>/', views.saludo, name='saludo'),
]
Vista en views.py:
# views.py
from django.http import HttpResponse
def saludo(request, nombre):
return HttpResponse(f"Hola {nombre}!")
- Si se accede a
http://localhost:8000/saludo/pepe, la respuesta será "Hola Pepe!".
3. Conflicto entre rutas /saludo y /saludo/nombre¶
Conflicto en las rutas
Si añades la ruta /saludo/ tal como está:
path('saludo/', views.saludo, name='saludo'),
Y luego la ruta con un parámetro de nombre:
path('saludo/<str:nombre>/', views.saludo, name='saludo_nombre'),
Las rutas entran en conflicto, porque Django no sabe si debe utilizar la ruta sin parámetros o la ruta con parámetros.
Solución¶
La ruta sin parámetros debe definirse después de la ruta con parámetros. Django recorrerá las rutas de arriba hacia abajo, por lo que siempre debe estar primero la ruta con parámetros para que no haya ambigüedad.
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('saludo/<str:nombre>/', views.saludo, name='saludo_nombre'), # Ruta con parámetro
path('saludo/', views.saludo_generica, name='saludo_generica'), # Ruta sin parámetro
]
De este modo, la ruta con parámetros saludo/<str:nombre>/ será capturada por el primer path, y la ruta sin parámetros será la última.
4. Ejercicio práctico¶
Crear una nueva ruta con parámetros
Crear varias rutas a las que les pasemos 2 números enteros.
sumar/num1/num2→ Devuelve la suma de los dos números.restar/num1/num2→ Devuelve la resta de los dos números.multiplicar/num1/num2→ Devuelve la multiplicación de los dos números.dividir/num1/num2→ Devuelve la división de los dos números.
En la ruta de la división, si el segundo número es 0, debe devolver un mensaje indicando que no se puede dividir por cero.
Solución
| solución | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
5. Resumen¶
En este tema, hemos aprendido cómo utilizar parámetros en las rutas de Django para crear URLs dinámicas. Los parámetros nos permiten hacer que nuestras vistas respondan a datos pasados por el usuario en la URL. También hemos visto cómo evitar conflictos de rutas y cómo gestionarlas correctamente. Estos parámetros permiten que las aplicaciones web sean más interactivas y útiles.