Parametros de Views no Django
No Django, as funções de visualização(views) podem receber parâmetros adicionais além do objeto HttpRequest. Esses parâmetros são definidos na URL da rota e são capturados pelo Django para repassá-los à função de visualização.
Por exemplo, na URL:
http://127.0.0.1:8000/index/Tom/38/Os segmentos Tom e 38 representam parâmetros que podem ser passados para uma função de view correspondente.
Definição de Parâmetros com a Função path
No arquivo views.py, podem ser definidas funções que aceitam parâmetros. Por exemplo:
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, o parâmetro name recebe o valor correspondente da URL. Ele pode ser manipulado internamente na função como qualquer outro argumento.
No arquivo urls.py, o seguinte código pode ser usado para configurar as rotas:
from django.urls import path
from hello import views
urlpatterns = [
path("", views.index),
path("user/<str:name>", views.user),
]O parâmetro name na rota é especificado entre os delimitadores < >, no formato <tipo:nome>. Aqui, o tipo str indica que o valor será tratado como uma string. Outros especificadores disponíveis no Django incluem:
str: qualquer string, exceto/. É o valor padrão.int: números inteiros positivos.slug: combina caracteres alfanuméricos ASCII, hífens e underscores.uuid: corresponde a um UUID, como075194d3-6885-417e-a8a8-6c931e272f00.path: aceita strings que podem incluir o caractere/.
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 pode ser acessada pela URL http://127.0.0.1:8000/user/Tom. Nesse caso, o valor Tom será atribuído ao parâmetro name.

Definição de Múltiplos Parâmetros
Se for necessário incluir um segundo parâmetro, como age, no arquivo views.py, a função pode ser alterada para:
def user(request, name, age):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")No arquivo urls.py, a rota deve incluir os dois parâmetros:
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 será tratado como um inteiro devido ao especificador int. A função user pode ser acessada pela URL http://127.0.0.1:8000/user/Tom/38, onde Tom e 38 serão atribuídos, respectivamente, aos parâmetros name e age.
Dessa forma, URLs como http://127.0.0.1:8000/user ou http://127.0.0.1:8000/user/Tom serão tratadas corretamente.

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 não for fornecido, ele será definido como "Indefinido", e age será definido como 0.
No arquivo urls.py, é necessário definir rotas adicionais para tratar URLs com diferentes combinações de parâmetros:
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. No arquivo views.py, a função de view permanece a mesma:
def user(request, name, age):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")No arquivo urls.py, a configuração da rota pode ser feita com 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), o nome do parâmetro é especificado entre < >, seguido por uma expressão regular. No exemplo acima, name aceita apenas caracteres alfabéticos (\D+), enquanto age aceita apenas dígitos (\d+).
Rotas com valores padrão para parâmetros também podem ser definidas com re_path. A função no arquivo views.py pode ser ajustada para:
def user(request, name="Indefinido", age=0):
return HttpResponse(f"<h2>Nome: {name} Idade: {age}</h2>")No arquivo urls.py, rotas adicionais precisam ser configuradas para lidar com combinações de parâmetros ausentes:
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.
Documentação oficial: