Привязка к представлениям Джанго - PullRequest
0 голосов
/ 21 января 2010

Простой вопрос. У меня есть куча просмотров Джанго. Есть ли способ сообщить django, что вместо каждого вида используйте foo(view)? Пример:

Вместо записи

@foo
@bar
@baz
def view(request):
    # do something

все время хотелось бы

def view(request):
    markers = ['some', 'markers']

и подключите это к django:

for view in all_the_views_in_my_app:
    view = do_something_based_on_the_marker(view)

Я бы хотел, чтобы это было сделано во время запуска сервера. Есть мысли?

Ответы [ 2 ]

2 голосов
/ 21 января 2010

В зависимости от того, что вы хотите сделать (или достичь), вы можете написать пользовательское промежуточное программное обеспечение и реализовать метод process_view (и / или любой другой метод, который вам нужен):

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

1 голос
/ 21 января 2010

Я не знаю, почему вы хотите это сделать. Я тоже не знаю, почему вы не хотите использовать декораторы. Но вы можете использовать этот уродливый (и, вероятно, подверженный ошибкам) ​​взломать в качестве начала:

def view(request):
    pass
view.markers = ['some', 'markers']

в другом месте:

from app import views
[x for x in views.__dict__.values() if hasattr(x,'markers')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...