Atualizado: 14/12/2024

Roteamento com path e re_path

No Django, as view functions (ou simplesmente views) são funções Python que recebem uma requisição HTTP e retornam uma resposta HTTP . Essas views são mapeadas para URLs específicas através de um arquivo de roteamento chamado urls.py.

Por exemplo, no arquivo views.py, temos as seguintes funções de visualização:

from django.http import HttpResponse
  
def index(request):
    return HttpResponse("<h2>Página Principal</h2>")
    
def about(request):
    return HttpResponse("<h2>Sobre o Site</h2>")
    
def contact(request):
    return HttpResponse("<h2>Contato</h2>")

Essas funções de visualização são mapeadas para caminhos específicos no arquivo urls.py por meio da função path, que pertence ao pacote django.urls:

from django.urls import path
from hello import views
    
urlpatterns = [
    path('', views.index),
    path('about', views.about),
    path('contact', views.contact),
]

path

A função path é responsável por mapear uma view para um caminho específico e segue a seguinte assinatura:

path(route, view, kwargs=None, name=None)
  • route: é uma string que contém o caminho da URL.

  • view: é a função de visualização que será chamada quando o caminho da URL for acessado.

  • kwargs: são argumentos adicionais passados para a função de visualização.

  • name: Nome atribuído à rota, que pode ser usado para referenciá-la em outras partes do projeto.

No exemplo acima, apenas os dois primeiros parâmetros foram utilizados, pois são obrigatórios: o caminho da URL e a função de visualização. Para adicionar um nome à rota, pode ser incluído o parâmetro name:

path('', views.index, name='home')

Aqui, a rota foi nomeada como "home" e pode ser referenciada em outras partes do projeto.

re_path

Embora a função path seja adequada para maioria dos casos, ela exige que o caminho da URL corresponda exatamente ao padrão especificado. Por exemplo, no caso do mapeamento para a função views.about, o endereço precisa ser exatamente "about". Se uma barra adicional for incluída, como em "about/", a rota não será encontrada.

Navegador exibindo página não encontrada

Para lidar com casos em que o caminho da URL pode variar, o Django fornece a função re_path, que permite a utilização de expressões regulares para definir padrões de roteamento mais flexíveis. la também está disponível no pacote django.urls e segue a assinatura semelhante à função path:

re_path(route, view, kwargs=None, name=None)

Vamos reescrever o arquivo urls.py para o seguinte:

from django.urls import path, re_path
from hello import views
    
urlpatterns = [
    path('', views.index),
    re_path(r'^about', views.about),
    re_path(r'^contact', views.contact),
]

O símbolo ^ na rota ^about indica que a URL deve começar com a palavra "about". Isso permite que qualquer URL iniciada por "about" seja capturada pela função views.about, como:

  • "about"

  • "about/"

  • "about/us"

Principais Elementos de Expressões Regulares

A função re_path oferece suporte a expressões regulares, permitindo definir padrões avançados para as rotas. Abaixo estão os principais elementos da sintaxe de expressões regulares aplicáveis no Django:

ElementoDescrição
^Marca o início da string.
$Marca o final da string.
+Um ou mais caracteres.
?Zero ou um caractere.
{n}Exatamente n ocorrências.
{n, m}De n a m ocorrências.
.Qualquer caractere (exceto quebra de linha).
\d+Um ou mais dígitos.
\D+Um ou mais caracteres não numéricos.
\w+Um ou mais caracteres alfanuméricos.

Exemplos de padrões e correspondências:

PadrãoURLs CorrespondentesURLs Não Correspondentes
r'^$'raiz do site-
r'^about'about/, about/contact-
r'^about/contact'about/contactabout/
r'^products/\d+/'products/23/, products/6459/products/abc/
r'^products/\D+/'products/abc/, products/abc/123products/123/
r'^products/phones|tablets/'products/phones/, products/tablets/products/phones-tablets/
r'^products/[-\w]+/'products/abc-123/-
r'^products/[A-Z]{2}/'products/BR/products/Br/, products/Bra/

Passando Valores

O parâmetro kwargs das funções path e re_path permite passar valores para a view.

No exemplo a seguir, a função about em views.py recebe dois parâmetros adicionais, name e age:

from django.http import HttpResponse
   
def index(request):
    return HttpResponse("<h2>Página Principal</h2>")
    
def about(request, name, age):
    return HttpResponse(f"""
            <h2>Sobre o Usuário</h2>
            <p>Nome: {name}</p>
            <p>Idade: {age}</p>
    """)

No arquivo urls.py, esses valores são passados utilizando o parâmetro kwargs:

from django.urls import path
from hello import views
    
urlpatterns = [
    path('', views.index),
    path('about', views.about, kwargs={"name": "Tom", "age": 38}),
]

Neste caso, a rota "about" transmitirá os valores "Tom" e 38 como argumentos name e age para a função about. O navegador exibirá o seguinte conteúdo:

<h2>Sobre o Usuário</h2>
<p>Nome: Tom</p>
<p>Idade: 38</p>
Passando valores com kwargs
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