简单的问题。我有一堆django的观点。有没有办法告诉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)
我想在服务器启动时完成此操作。有什么想法吗?
答案 0 :(得分:2)
根据您想要做什么(或实现),您可以编写custom middelware并实施方法process_view
(和/或您需要的任何其他方法):
在Django调用视图之前调用
process_view()
。它应返回None
或HttpResponse
对象。如果它返回None
,Django将继续处理此请求,执行任何其他process_view()
中间件,然后执行相应的视图。如果它返回一个HttpResponse
对象,Django将不会打扰调用任何其他请求,视图或异常中间件或相应的视图;它将返回HttpResponse
。每次响应都会调用响应中间件。
答案 1 :(得分:1)
我不知道你为什么要这样做。我不知道为什么你不想使用装饰器。但你可以使用这个丑陋(并且可能容易出错)的黑客作为开始:
def view(request):
pass
view.markers = ['some', 'markers']
其他地方:
from app import views
[x for x in views.__dict__.values() if hasattr(x,'markers')]