django-admin管理后台高级自定义
django自带的admin后台管理系统,在很多网站中被称为django的杀手级的应用。那么django-admin的适用情形倒底有哪些呢,一般 来说对于大型的商业性的项目通常不用采用django-admin来做为后台管理框架系统,通常的做法是通过权限控制在前台以不同的模板页的风格来区别是前台功能还是后台功能,或者是建立一个独立的后台管理系统。那是不是说django-admin在国内就没有市场了呢,事实上并不是,对于一些小微企业或创业公司,或者项目比较紧急的时候通常会采用django-admin来作为后台系统
django-admin中进行定制化开发主要关注两部分内容:
UserAdmin
ModelAdmin
通过对这两个类进行子类化的方式来实现一些简单功能的定制
首先如果要对admin进行定制,需要将建立好的模型导入到admin模块之 中,然后在admin中注册该模块,如下所示:
class xxoo(models.Model):
pass
在admin文件中配置
from django.contrib import admin
from models import xxoo
注册:
admin.site.register(xxoo)
在django中本身支持本地化的语言显示,如需要把界面转变为中文的话需要在配置文件中添加以下配置MiDDLEWARE_CLASSES的SessionMiddleware下
django.middleware.locale.localeMiddleware
如果对于界面中用户信息的展示,不想全部显示或是想自定义显示可以通过自定义UserAdmin来实现
from django.contrib import admin
from models import xxoo
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
例:只显示以下几个字段,可以通过子类化来实现
class MyUserAdmin(UserAdmin):
list_display=('email','first_name','last_name')
同时由于user会注册到admin中,所以在定制化时需要先反注册
admin.site.unregister(user)
然后将user注册到MyUserAdmin中
admin.site.register(User,MyUserAdmin)
对于界面右侧的过滤器的自定义:如果只想过滤其中一个属性,如是否是职员:
可以在MyUserAdmin中加入以下代码:
List_filter=('is_staff',)
对于搜索的自定义,默认情况下django搜索所有字段,只要检索到某一字段包含所搜索的内容就会被搜索到,如果想自定义搜索的字段可以在MyUserAdmin中加入以下代码
search_fields=('last_name',)
如何显示自定义的模型在网站中的显示,如xxoo
同样是通过子类化来实现
在admin中注册poem
子类化ModelAdmin
class PoemModelAdmin(admin.ModelAdmin):
List_display=('email','first_name','last_name')
class Meta:
mode=Poem
admin.site.register(Poem,PoemModelAdmin)
给字段添加link查看信息,如想查看author的信息,通过以下设置后在页面中该 字段将变为一个a标签,点击时将带出相应的信息
List_display_links=['author',]
刷新页面后点击将字段标签查看
对于新注册的model默认情况下是没有搜索功能的,如果想加入搜索功能,可以在代码中加入以下代码
search_fields=('last_name',)
如果想使一个字段可以编辑,可以在代码中加入以下代码
List_editable=['title']
django中规定:一个字段不能同时可链接可编辑
对于admin后台界面的定制化,可以通过自定义template来实现
在代码中加入以下代码
change_form_template='xxx.html'
xxx.html的内容如下,继承change_form.html template目录下
{%extends 'admin/change_form.html'%}
{%block form_top%}
内容
{%endblock%}
widget用来定义显示风格,如显示为textbox,dropdownlist等
如果想修改一个字段的显示风格可以做以下设置
from django.contrib.auth.admin import Useradmin
from django.contrib.auth.models import User
from django import forms
from django.utils.safestring import mark_safe
from django.template.loader import rend_to_string
from models import xxoo
class PoemForm(forms.ModelForm):
class Meta:
model=xxoo
fields=['author','title']
widgets={
'author':forms.Textarea(attrs={'cols':'20','rows':'1'})
}
通过以上设置即将author字段设置为textarea样式,同时设置了它的一些属性
设置css样式:
在static文件夹中新建xxx.css
在代码中做以下设置
class SubInputText(forms.TextInput):
class Media:
css={
'all':('input.css',)
}
class PoemForm(forms.ModelForm):
class Meta:
model=xxoo
fields=['author','title']
widgets={
'author':forms.Textarea(attrs={'cols':'20','rows':'1'}),
'title':SubInputText(),#设置css
'type':forms.RadioSelect 将type字段设置为radiobutton样式
}
django-admin管理后台高级自定义的更多相关文章
- django admin管理后台中文添加问题
django版本号 1.7.8 #create database mydb character set utf8;#django-admin.py startproject mysite#设置sett ...
- django学习-23.admin管理后台的数据表数据的自定义展示
目录结构 1.前言 2.自定义设置一张指定的数据表的列表展示内容 2.1.第一步:如果我们想让数据表[hello_person]里面的表字段值全部展示出来,需在应用[hello]里的[admin.py ...
- django学习-26.admin管理后台里:修改登录页面标题,修改登录框标题,修改首页标题
目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看[site.py]的源码 2.2.第二步:在应用[hello]所在目录里的[admin.py]里重写三个属性的属性值 2.3.第三步:重启服 ...
- django学习-19.admin管理后台的配置和登录
目录结构 1.前言 2.admin管理后台的配置和登录的完整操作流程 2.1.第一步: 在[settings.py]里对常量[INSTALLED_APPS]的值进行相关配置 2.2.第二步: 在[ur ...
- django学习-27.admin管理后台里:对列表展示页面的数据展示进行相关优化
目录结构 1.前言 2.完整的操作步骤 2.1.第一步:查看ModelAdmin类和BaseModelAdmin类的源码 2.2.第二步:查看表animal对应的列表展示页面默认的数据展示 2.3.第 ...
- django学习-25.admin管理后台里:把表名称和表字段名称的展示值都由英文显示改为由中文显示
目录结构 1.前言 2.完整的操作步骤 2.1.第一步:修改模型类Article 2.2.第二步:重启服务 2.3.第三步:退出登录并再次成功登陆admin管理后台 2.4.第四步:查看最新的表名称展 ...
- Admin管理后台
Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的.可选工具.这些工具和插件,例如django.contrib.redirects都必须在setti ...
- 第五章:Admin管理后台
Django奉行Python的内置电池哲学.它自带了一系列在Web开发中用于解决常见问题或需求的额外的.可选工具.这些工具和插件,例如django.contrib.redirects都必须在setti ...
- 16.-admin管理后台
一.admin管理后台 Django提供给了比较完善的后台管理数据库接口,可供开发过程中调用和测试使用 Django会搜集所有已注册的模型类,为这些模型类提供数据管理界面,供开发者使用 命令:py ...
随机推荐
- day04.3-生成器
1. 生成器可以理想为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象. 2. 生成器分类及在python中的表现形式 生 ...
- Java_内存泄漏_实例1
版权声明:本文为博主原创文章,转载请注明出处. 记一次压测时Java内存泄漏问题的发现过程(2017-08-14) [前篇] ①20170811进行A系统与B系统之间的会话功能进行压测,加上脚本准备期 ...
- 洛谷P4705 玩游戏(生成函数+多项式运算)
题面 传送门 题解 妈呀这辣鸡题目调了我整整三天--最后发现竟然是因为分治\(NTT\)之后的多项式长度不是\(2\)的幂导致把多项式的值存下来的时候发生了一些玄学错误--玄学到了我\(WA\)的点全 ...
- html的<a>标签,表单,内嵌框架
一. <a>标签 0. 用图片当链接,就是把图片当成链接文字即可 <a href="http://www.baidu.com/" title="跳 ...
- Quartz.Net_表达式参考说明
字段名 允许的值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日 1-31 , - * ? / L W C 月 1-12 , - * / ...
- python-json.loads()保持原json字符串的顺序
import jsonfrom collections import OrderedDictmetadata = json.loads(text, object_pairs_hook=OrderedD ...
- 搭建maven环境——nexus
第一步:部署maven环境和jdk环境 jdk直接用openjdk1. :yum -y install java--openjdk maven环境 wget http://mirror.rise.ph ...
- iframe自适应高度,多层嵌套iframe自适应高度的解决方法
在页面无刷新更新方面,虽然现在的ajax很强悍,但是处理代码相对多点.想比之下,iframe就简单多了!处理iframe的自适应宽.高,会经常用到,网上整理了一份,写在这里备用: 单个iframe 高 ...
- Angular--TypeScript finalize 方法
self._entityService .getAll() .pipe( finalize(() => { if (self.sheet && self.sheet.length ...
- P2877 [USACO07JAN]牛校Cow School
传送门 $01$规划 $01$规划优质讲解:传送门 考虑先将每一科按 $t/p$ 从小到大排序,枚举每一个 $D$(删除的考试数量) 显然一开始的成绩是 $\frac{\sum_{i=d+1}^nt[ ...