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

yipeiwu_com5年前Python基础

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使用matplotlib绘图无法显示中文问题的解决方法

Python使用matplotlib绘图无法显示中文问题的解决方法

本文实例讲述了Python使用matplotlib绘图无法显示中文问题的解决方法。分享给大家供大家参考,具体如下: 在python中,默认情况下是无法显示中文的,如下代码: impo...

简单了解Python3 bytes和str类型的区别和联系

这篇文章主要介绍了简单了解Python3 bytes和str类型的区别和联系,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Pytho...

Numpy将二维数组添加到空数组的实现

使用append函数将一个二维数组添加到一个空数组,关键是维度要对的上 a=np.empty([0,3]) b = np.array([[1,2,3],[4,5,6]]) c=[[7...

Django对接支付宝实现支付宝充值金币功能示例

Django对接支付宝实现支付宝充值金币功能示例

很多网站里都有金币、积分之类的虚拟货币,获取这些往往需要充值。那么问题来了,如何在Django中对接支付宝实现支付宝充值金币的功能呢?网上很多资料都是电商的,那些都会带有订单系统之类比较...

Django中使用MySQL5.5的教程

Django中使用MySQL5.5的教程

“MySQL是一个功能齐全的关系数据库管理系统(RDBMS),可以与Oracle DB和Microsoft的SQL Server竞争。MySQL由瑞典公司MySQL AB赞助,该公司由O...