Автоматический GET к аргументу представления
-
11-09-2019 - |
Вопрос
some_view?param1=10¶m2=20
def some_view(request, param1, param2):
Возможно ли такое в Джанго?
Решение
Вы всегда можете написать декоратор.Например.что-то вроде (непроверено):
def map_params(func):
def decorated(request):
return func(request, **request.GET)
return decorated
@map_params
def some_view(request, param1, param2):
...
Другие советы
Я не уверен, что можно заставить его передать их как аргументы к функции просмотра, но почему вы не можете получить доступ к GET
переменные из request.GET
?Учитывая этот URL, Django имел бы request.GET['param1']
быть 10 и request.GET['param2']
быть 20.В противном случае вам пришлось бы придумать какое-то странное регулярное выражение, чтобы попытаться сделать то, что вы хотите.
Согласен с Паоло...вещи после "?" получают параметры и, вероятно, должны рассматриваться как таковые.Тем не менее, если вы действительно хотите сохранить определение some_view(), как вы указали в вопросе, вы можете сделать что-то вроде:
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
Или вы можете просто определить some_view() вот так и использовать параметры GET.Просто интересно, а зачем тебе это?
Вместо того, чтобы сражаться с Django, почему бы просто не запросить some_view/10/20, а затем настроить urls.py для извлечения аргументов?