主页 重写自定义django admin页面 正文

重写自定义django admin页面

作者:bcm   更新时间:2019年11月21日 11:19   


>django-admin的功能很强大,对于数据库增删改查、列表、筛选、搜索等常用功能一应俱全,但有时候未必满足要求。 我在开发博客公告、站点基本设置的时候,并不需要这么多的字段来展示。基本上只需要数据库存储一个字段,那么列表形式的展现,未免有些不适合。 # django-admin页面解读 一般点击进入django-admin的每个model时,会发现四个操作,增加一条、修改一条记录、删除一条记录、还有一个列表的界面 当注册一个页面时,我们的admin继承了ModelAdmin,在ModelAdmin里面有一个`changelist_view`的方法,他就是那个列表,它渲染了一个网页叫做`change_list.html`。 ![](/media/editor/TIM截图20191116145021_20191116145041672124.png) 也就是说,我们只要重写了这个方法就好了,渲染我们自己的HTML就好了。 # 案例一:公告 公告是个简单的方法展示,修改结果 ![](/media/editor/20191116145331_20191116145348481828.png) 代码如下: ``` @admin.register(Notice) class NoticeAdmin(admin.ModelAdmin): def changelist_view(self, request, extra_context=None): notice = self.model.objects.all().first() context = { 'id': notice.id, 'text': notice.text } if notice else {'id': '', 'text': ''} return render(request, template_name='admin/notice.html', context=context) ``` notice.html代码,需要注意的是集成`admin/base.html`,这样才能保持后台样式的一致。 ``` {% extends "admin/base.html" %} {% block content %} {% if not id %}
{% csrf_token %}
{% else %}
{% csrf_token %}
{% endif %} {% endblock %} ``` # 案例二:站点设置 站点设置需要这样一个页面,那就用change页面代替首页列表 ![](/media/editor/TIM截图20191116145818_20191116145840055562.png) 代码如下 ``` @admin.register(SiteSetting) class SiteSettingAdmin(admin.ModelAdmin): list_display = ['title', 'keywords', 'description', 'push_url'] def has_add_permission(self, request): count = self.model.objects.all().count() if count >= 1: return False else: return super().has_add_permission(request) def has_delete_permission(self, request, obj=None): return False def changelist_view(self, request, extra_context=None): site_setting = self.model.objects.all() count = site_setting.count() if count == 1: return HttpResponseRedirect('/admin/bbd_admin/sitesetting/%s/change/' % site_setting.first().id) else: return super().changelist_view(request, extra_context=None) ```


目录

关于站点

变饼档 变饼档 头条号 微信号

@变饼档

网站备案/许可证号 陕ICP备17000772号-1

联系邮箱 942242856@qq.com


@技术支持

前端 layui,jquery,vue

后端 django,django-simpleui