Rotas Aninhadas e a Função include - Django
A função include()
path()
re_path()
Considere o seguinte exemplo, onde no arquivo views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Página principal")
def products(request):
return HttpResponse("Lista de produtos")
def new(request):
return HttpResponse("Novos produtos")
def top(request):
return HttpResponse("Produtos mais populares")
As últimas três funções são diretamente relacionadas ao domínio de produtos.
No arquivo urls.py
from django.urls import path, include
from hello import views
product_patterns = [
path("", views.products),
path("new", views.new),
path("top", views.top),
]
urlpatterns = [
path("", views.index),
path("products/", include(product_patterns)),
]
Aqui, a variável product_patterns
include()
"products/"
path("products/", include(product_patterns)),
Isso possibilita que as rotas aninhadas sejam combinadas com o caminho definido na rota principal. Por exemplo, a URL http://127.0.0.1:8000/products/top
top
Essa organização evita redundâncias e facilita a manutenção, agrupando rotas que compartilham um contexto comum.
Passando Parâmetros em Rotas Aninhadas
As rotas aninhadas herdam os parâmetros definidos na rota principal, o que permite uma configuração mais eficiente. Considere o seguinte exemplo no arquivo views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Página principal")
def products(request, id):
return HttpResponse(f"Produto {id}")
def comments(request, id):
return HttpResponse(f"Comentários sobre o produto {id}")
def questions(request, id):
return HttpResponse(f"Dúvidas sobre o produto {id}")
Aqui, as funções relacionadas a produtos utilizam o parâmetro id
No arquivo urls.py
id
from django.urls import path, include
from hello import views
product_routes = [
path("", views.products),
path("comments", views.comments),
path("questions", views.questions),
]
urlpatterns = [
path("", views.index),
path("products/<int:id>/", include(product_routes)),
]
Aqui, o parâmetro numérico id
products/<int:id>/
id