Django Admin 添加自定义视图与模板适配详解
本文介绍如何在 Django Admin 中添加自定义视图。通过继承 ModelAdmin 并重写 get_urls 方法注册路由,利用 reverse 函数进行包含 admin: 前缀的反向映射。同时解决自定义模板继承 base_site.html 后缺失顶部导航栏的问题,通过调整 has_permission 判断逻辑优化显示效果,实现完整的后台功能扩展。
Django Admin 自定义视图开发概述
Django Admin 提供了完善的用户管理和数据模型管理功能,使用便捷。为了扩展后台功能,需要研究如何在 Admin 界面中添加自定义页面。
继承 ModelAdmin 与视图处理
首先,在 admin.py 文件中创建一个类,并继承自 django.contrib.admin.ModelAdmin 基类。
class FaceAdmin(admin.ModelAdmin):
接着,在该类中编写自定义的视图处理函数。ModelAdmin 基类中提供的 save_model 和 delete_model 函数可用于数据对象新建和删除的前后处理。若自定义函数需要重定向到自建视图,反向映射必须包含 admin: 前缀,格式为 。
return HttpResponseRedirect(reverse('admin:manage_face_image', args=(face_id,)))
路由注册与反向映射
随后,添加一个用于获取路由的函数,将自定义路由注册进去。具体实现如下所示:
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('<int:face_id>/manage_face_image/',
self.admin_site.admin_view(self.manage_face_image), name='manage_face_image'),
path('<int:face_id>/<str:face_file>/delete_face_image/',
self.admin_site.admin_view(self.delete_face_image), name='delete_face_image')
]
return my_urls + urls
注册 Admin 站点
最后,将该子类与对应的数据模型一起注册到 Admin 站点中,代码示例如下:
admin.site.register(Face, FaceAdmin)
完成上述配置后,即可通过类似 /admin/app/face/5/manage_face_image/ 的 URL 访问自定义视图。其中,admin 代表 Admin 站点,app 代表 Django 应用名称,face 代表数据模型名称。
模板继承与权限显示问题处理
自定义视图所使用的模板应在顶部继承 admin_site 的基模板,即 。
{% extends "admin/base_site.html" %}
然而,可能会发现页面右上角缺少正常的 Admin 网站包含的欢迎信息、站点视图、修改密码及注销链接。这是因为 base_site.html 继承自 base.html,其中包含一个判断逻辑 {% if has_permission %}。这是 django.contrib.admin.AdminSite 类的一个属性,返回值为 user.is_active and user.is_staff。由于未继承该基类,因此缺失此属性。实际上 base.html 中也有类似判断,为简化处理,可直接删除 if has_permission 判断语句。虽然仍缺少站点视图,但界面显示已明显改善。此外,模板中使用 URL 时需加上 admin: 前缀,写作 。
{% url 'admin:manage_face_image' face_id %}
以上即为在 Django Admin 中添加自定义视图的完整示例,供参考使用。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









