在django admin中添加自定义视图的例子


Posted in Python onJuly 26, 2019

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

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

class FaceAdmin(admin.ModelAdmin):

然后在里面写自己的视图处理函数。基类里面的save_model和delete_model函数可以做数据对象的新建和删除的预处理和后处理。自建的函数如果要redirect到自己建的view,反向映射要包含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.site.register(Face, FaceAdmin)

这样就可以通过/admin/app/face/5/manage_face_image/这个url来访问自己的视图了。详细说一下,admin是指admin站点,app是指自己的djangoapp,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中添加自定义视图的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python合并字符串的3种方法
May 21 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
python3将视频流保存为本地视频文件
Jun 20 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
python把ipynb文件转换成pdf文件过程详解
Jul 09 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
python实现经纬度采样的示例代码
Dec 10 Python
详解Python调用系统命令的六种方法
Jan 28 Python
python+opencv实现车道线检测
Feb 19 Python
深入了解Django中间件及其方法
Jul 26 #Python
如何在Django项目中引入静态文件
Jul 26 #Python
Python 画出来六维图
Jul 26 #Python
django做form表单的数据验证过程详解
Jul 26 #Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 #Python
解决python中导入win32com.client出错的问题
Jul 26 #Python
Django CBV类的用法详解
Jul 26 #Python
You might like
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
Tab页界面 用jQuery及Ajax技术实现(php后台)
2011/10/12 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jQuery解决浏览器兼容性问题案例分析
2016/04/15 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
脚本div实现拖放功能(两种)
2017/02/13 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
用原生 JS 实现 innerHTML 功能实例详解
2019/04/03 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
Python实现控制台输入密码的方法
2015/05/29 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
python中类变量与成员变量的使用注意点总结
2017/04/29 Python
python 定时修改数据库的示例代码
2018/04/08 Python
Python随机函数random()使用方法小结
2018/04/29 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python实现的按要求生成手机号功能示例
2019/10/08 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
Python unittest如何生成HTMLTestRunner模块
2020/09/08 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
老龄工作先进事迹
2014/08/15 职场文书
小学英语复习计划
2015/01/19 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
Python Django搭建文件下载服务器的实现
2021/05/10 Python