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
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
path
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
path(route, view, kwargs=None, name=None)
: é uma string que contém o caminho da URL.route
é a função de visualização que será chamada quando o caminho da URL for acessado.view:
: são argumentos adicionais passados para a função de visualização.kwargs
: Nome atribuído à rota, que pode ser usado para referenciá-la em outras partes do projeto.name
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
views.about
"about"
"about/"
Para lidar com casos em que o caminho da URL pode variar, o Django fornece a função re_path
django.urls
path
re_path(route, view, kwargs=None, name=None)
Vamos reescrever o arquivo urls.py
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 ^
^about
"about"
"about"
views.about
"about"
"about/"
"about/us"
Principais Elementos de Expressões Regulares
A função re_path
Elemento | Descriçã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ão | URLs Correspondentes | URLs Não Correspondentes |
---|---|---|
r'^$' | raiz do site | - |
r'^about' | about/ , about/contact | - |
r'^about/contact' | about/contact | about/ |
r'^products/\d+/' | products/23/ , products/6459/ | products/abc/ |
r'^products/\D+/' | products/abc/ , products/abc/123 | products/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
path
re_path
view
No exemplo a seguir, a função about
views.py
name
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
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"
"Tom"
38
name
age
about
<h2>Sobre o Usuário</h2>
<p>Nome: Tom</p>
<p>Idade: 38</p>