Django Middleware: как получить доступ к параметрам представления из middleware - PullRequest
1 голос
/ 04 февраля 2010

Допустим, у меня есть представление:

def pony_view(request, arg1, arg2):
    ... Make ponies, etc ...

И промежуточное ПО:

class MyMiddleware(object):
    def process_request(request):
        # How do I access arg1, arg2 here?

Конечно, arg1 и arg2 будут передаваться через URL-параметры с помощью urls.py.

Причина, по которой мне нужно это сделать, заключается в том, что я хочу добавить что-то в request.session до запуска функции view (хотя мне нужно это из URL).

1 Ответ

8 голосов
/ 04 февраля 2010

Вам нужно будет реализовать метод process_view.

Имеет эту подпись:

process_view(self, request, view_func, view_args, view_kwargs)

и выполняется до вызова функции просмотра:

process_view() вызывается как раз перед тем, как Джанго вызывает представление. Он должен вернуть либо None, либо HttpResponse объект. Если он вернет None, Django продолжит обработку этого запроса, выполнив любое другое промежуточное программное обеспечение process_view() и, затем, соответствующее представление. Если он возвращает объект HttpResponse, Django не будет беспокоиться о вызове ЛЮБОГО другого запроса, промежуточного программного обеспечения представления или исключения или соответствующего представления; он вернет это HttpResponse. Промежуточное программное обеспечение всегда вызывается при каждом ответе.

Тогда вы сможете получить доступ к arg1 и arg2 с помощью:

class MyMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        arg1, arg2 = view_args[:2]
...