我有一些自定义代码,我想在调用任何管理员视图之前执行。在概念上它似乎很简单;只需创建一个执行我想要的包装器视图,然后将所有管理视图包装在其中。但是我该怎么做?
这是我的主要urls.py的相关部分:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)
有没有办法包装所有管理员视图而不必单独指定每一个?
答案 0 :(得分:1)
您可以通过创建单独的urls
模块,导入admin.site.urls
,然后根据您从urlpatterns
读取的数据动态构建admin.site.urls.urlpatterns
来修饰所有路由功能。我不建议修改admin urls
模块中的路由功能,因为模式是通过静态引用公开的。
但正确的方法是编写custom middleware,它可以在与装饰器相同的阶段插入视图处理:在使用请求调用视图之前,在它抛出异常或返回响应之后。