GET Auto ao argumento de vista
-
11-09-2019 - |
Pergunta
some_view?param1=10¶m2=20
def some_view(request, param1, param2):
É tão possível em Django?
Solução
Você pode sempre escrever um decorador. Por exemplo. algo como (não testado):
def map_params(func):
def decorated(request):
return func(request, **request.GET)
return decorated
@map_params
def some_view(request, param1, param2):
...
Outras dicas
Eu não tenho certeza que é possível obtê-lo para passá-los como argumentos para a função de visão, mas porque você não pode acessar as variáveis ??GET
de request.GET
? Dado que URL, Django teria request.GET['param1']
ser 10 e request.GET['param2']
ser 20. Caso contrário, você teria que chegar a algum tipo de expressão regular estranho para tentar e fazer o que quiser.
Eu concordo com Paolo ... o material após o '?' são parâmetros GET e provavelmente deve ser tratado como tal. Dito isto, se você realmente quer manter a definição de some_view () como você indicou na pergunta, você poderia fazer algo como:
from django.http import Http404
def some_view_proxy(request):
if 'param1' in request.GET and 'param2' in request.GET:
return some_view(request, request.GET['param1'],
request.GET['param2'])
raise Http404
Ou você poderia apenas definir some_view () como este e usar os parâmetros GET. Só por curiosidade, por que você quer isso?
Em vez de lutar Django, porque não basta pedido some_view / 10/20 e, em seguida, configurar urls.py para extrair os argumentos?