La obtención automática al argumento de vista
-
11-09-2019 - |
Pregunta
some_view?param1=10¶m2=20
def some_view(request, param1, param2):
¿Es posible tal en Django?
Solución
Siempre se puede escribir un decorador. P.ej. algo así (no probado):
def map_params(func):
def decorated(request):
return func(request, **request.GET)
return decorated
@map_params
def some_view(request, param1, param2):
...
Otros consejos
No estoy seguro de que es posible conseguir que pase a ellos como argumentos a la función de vista, pero ¿por qué no se puede acceder a las variables de GET
request.GET
? Teniendo en cuenta que el URL, Django tendría que ser request.GET['param1']
10 y 20. request.GET['param2']
ser lo contrario, tendría que llegar a algún tipo de expresión regular extraña para tratar de hacer lo que quiera.
Estoy de acuerdo con Paolo ... las cosas después de que el '?' son parámetros GET y probablemente debería ser tratado como tal. Dicho esto, si usted realmente quiere mantener la definición de some_view () como se ha declarado en la pregunta, usted podría hacer 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
O usted podría definir some_view () como este y utilizar los parametros GET. Sólo por curiosidad, ¿por qué quieres eso?
En lugar de luchar Django, ¿por qué no pedir some_view / 10/20 y luego configurar urls.py para extraer los argumentos?