如何在django中包装管理员视图?

时间:2014-01-13 00:33:07

标签: python django

我有一些自定义代码,我想在调用任何管理员视图之前执行。在概念上它似乎很简单;只需创建一个执行我想要的包装器视图,然后将所有管理视图包装在其中。但是我该怎么做?

这是我的主要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)),
)

有没有办法包装所有管理员视图而不必单独指定每一个?

1 个答案:

答案 0 :(得分:1)

您可以通过创建单独的urls模块,导入admin.site.urls,然后根据您从urlpatterns读取的数据动态构建admin.site.urls.urlpatterns来修饰所有路由功能。我不建议修改admin urls模块中的路由功能,因为模式是通过静态引用公开的。

但正确的方法是编写custom middleware,它可以在与装饰器相同的阶段插入视图处理:在使用请求调用视图之前,在它抛出异常或返回响应之后。