• 在django admin中添加自定义视图


     

    来自https://blog.csdn.net/qq_35753140/article/details/84881757

    django admin提供了完善的用户管理和数据模型管理,方便实用。研究了一下在admin里面添加自己的页面。

    在admin.py里继承django.contrib.admin.ModelAdmin基类

    class FaceAdmin(admin.ModelAdmin):
    
    • 1

    然后在里面写自己的视图处理函数。基类里面的save_modeldelete_model函数可以做数据对象的新建和删除的预处理和后处理。自建的函数如果要redirect到自己建的view,反向映射要包含admin:,写成

    return HttpResponseRedirect(reverse('admin:manage_face_image', args=(face_id,)))
    
    • 1

    然后添加一个获取路由的函数,把自己的路由添加上

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    最后把子类和数据模型一起注册成admin的站点:

    admin.site.register(Face, FaceAdmin)
    
    • 1

    这样就可以通过/admin/app/face/5/manage_face_image/这个url来访问自己的视图了。详细说一下,admin是指admin站点,app是指自己的djangoapp,face是数据模型。

    自定义视图的模板在最顶上继承admin_site的基模板

    {% extends "admin/base_site.html" %}
    
    • 1

    但是会发现右上角没有正常的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 %}
  • 相关阅读:
    利用Cubieborad破解WiFi
    从零开始——Mysql备份还原数据库
    从零开始——Ubuntu系统安装redis和phpredis
    监控应用卡顿BlockCanary
    2.AS内存分析
    热修复原理
    MultiDex 原理
    APP启动时白屏优化及multidex优化
    线程池的简便记忆方法
    2.volatile和AtomicXX
  • 原文地址:https://www.cnblogs.com/slqt/p/10676537.html
Copyright © 2020-2023  润新知