Atualizado: 14/12/2024

Parametros de Views - 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, como 075194d3-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.

Navegador exibindo parâmetros recebidos pela view

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.

Navegador exibindo dois parâmetros recebidos pela view

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),
]
Navegador exibindo valores padrão para parâmetros definidos na view

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.

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