Atualizado: 14/12/2024

Rotas Aninhadas e a Função include - Django

A função include() possibilita a definição de rotas aninhadas ou sub-rotas associadas a uma rota principal. Essa funcionalidade é implementada por meio da passagem de uma lista de padrões de rota, que pode ser composta por chamadas às funções path() e/ou re_path().

Considere o seguinte exemplo, onde no arquivo views.py são definidas as seguintes funções:

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, é possível organizar as rotas relacionadas aos produtos da seguinte forma:

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 encapsula rotas específicas para o domínio de produtos. Este conjunto de rotas é passado para a função include() para ser associado à rota principal "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 será processada pela função top.

Navegador exibindo rota aninhada

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, que representa o identificador do produto.

No arquivo urls.py, as rotas podem ser configuradas de modo que o parâmetro id seja definido na rota principal e automaticamente repassado para as rotas aninhadas:

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 é definido na rota principal products/<int:id>/ e automaticamente repassado para as sub-rotas. Dessa forma, não é necessário declarar o parâmetro id individualmente em cada sub-rota.

Navegador exibindo a página de dúvidas sobre o produto
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com