Parametros de Views - Django
No Django, as funções de visualização(views) podem receber parâmetros adicionais além do objeto HttpRequest
Por exemplo, na URL:
http://127.0.0.1:8000/index/Tom/38/
Os segmentos Tom
38
Definição de Parâmetros com a Função path
No arquivo views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("<h2>Página Principal</h2>")
def user(request, name):
return HttpResponse(f"<h2>Nome: {name}</h2>")
Na função user
name
No arquivo urls.py
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("user/<str:name>", views.user),
]
O parâmetro name
< >
<tipo:nome>
str
: qualquer string, excetostr
. É o valor padrão./
: números inteiros positivos.int
: combina caracteres alfanuméricos ASCII, hífens e underscores.slug
: corresponde a um UUID, comouuid
.075194d3-6885-417e-a8a8-6c931e272f00
: aceita strings que podem incluir o caracterepath
./
Os nomes e quantidades dos parâmetros na rota devem corresponder aos argumentos da função que processará a solicitação.
A função user
http://127.0.0.1:8000/user/Tom
Tom
name
Definição de Múltiplos Parâmetros
Se for necessário incluir um segundo parâmetro, como age
views.py
def user(request, name, age):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
No arquivo urls.py
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("user/<str:name>/<int:age>", views.user),
]
Neste exemplo, o valor de age
int
user
http://127.0.0.1:8000/user/Tom/38
Tom
38
atribuídos
name
age
Dessa forma, URLs como http://127.0.0.1:8000/user
http://127.0.0.1:8000/user/Tom
Valores Padrão para Parâmetros
Quando valores para os parâmetros não são fornecidos na URL, ocorre um erro 404, pois a solicitação não corresponde a nenhuma rota definida. Para evitar isso, valores padrão podem ser atribuídos aos parâmetros na função de view:
def user(request, name="Indefinido", age=0):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
Neste caso, se o valor de name
"Indefinido"
age
0
No arquivo urls.py
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("user", views.user),
path("user/<str:name>", views.user),
path("user/<str:name>/<int:age>", views.user),
]
Definição de Parâmetros com a Função re_path
O Django também permite a utilização de expressões regulares para definir rotas e parâmetros, utilizando a função re_path
views.py
def user(request, name, age):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
No arquivo urls.py
re_path
from django.urls import path, re_path
from hello import views
urlpatterns = [
path("", views.index),
re_path(r"^user/(?P<name>\D+)/(?P<age>\d+)", views.user),
]
No padrão (?P<nome_do_parametro>expressão_regular)
< >
name
\D+
age
\d+
Rotas com valores padrão para parâmetros também podem ser definidas com re_path
views.py
def user(request, name="Indefinido", age=0):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")
No arquivo urls.py
urlpatterns = [
path("", views.index),
re_path(r"^user/(?P<name>\D+)/(?P<age>\d+)", views.user),
re_path(r"^user/(?P<name>\D+)", views.user),
re_path(r"^user", views.user),
]
É importante garantir que as rotas mais específicas sejam declaradas antes das mais genéricas. Isso evita conflitos no roteamento e assegura que os valores sejam processados corretamente de acordo com o formato da URL.