Auto GET à l'argument de vue
-
11-09-2019 - |
Question
some_view?param1=10¶m2=20
def some_view(request, param1, param2):
est-ce possible dans Django?
La solution
Vous pouvez toujours écrire un décorateur. Par exemple. quelque chose comme (non testé):
def map_params(func):
def decorated(request):
return func(request, **request.GET)
return decorated
@map_params
def some_view(request, param1, param2):
...
Autres conseils
Je ne suis pas sûr qu'il est possible de l'obtenir pour les passer comme arguments à la fonction de vue, mais pourquoi ne peux pas vous accéder aux variables GET
de request.GET
? Étant donné que l'URL, Django aurait request.GET['param1']
être 10 et 20. Dans le cas contraire request.GET['param2']
être, vous auriez à venir avec une sorte d'expression régulière bizarre d'essayer de faire ce que vous voulez.
Je suis d'accord avec Paolo ... les choses après le « ? » sont des paramètres GET et devrait probablement être traitée comme telle. Cela dit, si vous voulez vraiment garder la définition de some_view () que vous avez dit dans la question, vous pourriez faire quelque chose comme:
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 vous pouvez simplement définir some_view () comme celui-ci et utiliser l'EEG params. Juste curieux, pourquoi voulez-vous que?
Au lieu de combattre Django, pourquoi ne pas demander que some_view / 10/20, puis mis en place urls.py pour extraire les arguments?