stark组件开发之列表页面定制列
先看一张页面展示的效果图:

看一看我的 model 表!是什么样子:

看一看数据库是什么样子:
看 页面展示图,有表头。 有数据。
模型表中,每一个字段, 都指定了 verbose_name。
如何解决?
每个子类中,自定义 list_display 用于指定, 需要展示。 表中的哪个字段(这个名字和表中的字段需要,对应上。 不能错。)
class UserInfoHandler(StartHandler):
list_display = ["name", "age", "depart"] # 定义表头显示字段 site.register(models.UserInfo, UserInfoHandler)
基类中 指定一个变量。 list_display = [] 该变量。在子类指定之后。 对象调用时,就会是子类中的 list_display = [......]
class StartHandler(object):
list_display = [] def __init__(self, model_class, prve):
self.model_class = model_class
self.prev = prve def check_list_view(self, request):
'''
列表查看页面
:param request:
:return:
'''
# 页面要显示的列 self.list_display 示例:['name', 'age', 'depart'] # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
# self.model_class._meta.get_field('name').verbose_name
header_list = [] # 表头
for name in self.list_display:
verbose_name = self.model_class._meta.get_field(name).verbose_name # 获取到 verbose_name 放入列表中
header_list.append(verbose_name) # 2. 处理 从数据库 取到的数据 # 用户访问的表 self.model_class
data_list = self.model_class.objects.all() body_list = [] # 整体的body
for row in data_list:
row_list = [] # 每一行要展示的内容
for key in self.list_display:
row_list.append(getattr(row, key)) # row是个model类对象,使用getattr 获取值
body_list.append(row_list) # 将每一行,添加到 body_list 中。 return render(request, "changelist.html",
{"header_list": header_list, "data_list": data_list,
"body_list": body_list})
row_list.append(getattr(row, key)) 一定要使用 getattr方法。 不能使用 句点符。
比如 row_list.append(row.key) . 这样做。在去找外键的时候。 是会报错的。
stark组件开发之列表页面默认显示列:
上面的代码中,基类中的 list_display=[] 所以, 用户就必须要,自己写一个字类,并指定display列表。 才可以使用此功能。
所以需要一个默认展示的功能:
class StartHandler(object):
list_display = [] def __init__(self, model_class, prve):
self.model_class = model_class
self.prev = prve def check_list_view(self, request):
'''
列表查看页面
:param request:
:return:
'''
# 页面要显示的列 self.list_display 示例:['name', 'age', 'depart'] # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
# self.model_class._meta.get_field('name').verbose_name
header_list = [] # 表头
if self.list_display:
for name in self.list_display:
verbose_name = self.model_class._meta.get_field(name).verbose_name
header_list.append(verbose_name)
else:
header_list.append(self.model_class._meta.model_name) # 2. 处理 从数据库 取到的数据 # 用户访问的表 self.model_class
data_list = self.model_class.objects.all() body_list = []
for row in data_list:
row_list = []
if self.list_display:
for key in self.list_display:
row_list.append(getattr(row, key))
else:
row_list.append(row)
body_list.append(row_list) return render(request, "changelist.html",
{"header_list": header_list, "data_list": data_list,
"body_list": body_list})
默认展示功能,如果用户自己没有,指定 list_display。 默认展示对象就行了。
stark组件开发之列表页面定制列的更多相关文章
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列
要实现,这个方法.子类中 list_diplay 这个列表, 就不能够写死.他应该是 可以根据.用户的不同,返回不同的值. 所以 就需要一个函数, 可以进行判断当前用户是谁. 并且往这个列表中添加,他 ...
- stark组件开发之列表页面自定义函数扩展
对于展示页面, 可能需要显示一些. 数据库中,没有的字段. 比如, 删除按钮, 编辑按钮. 这个数据库,是没有的. 所以,可能就需要, 添加一个这个东西. 比如我在渲染的时候, 给他添加两个函数进 ...
- stark组件开发之编辑功能实现
编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的 记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
- stark组件开发之添加按钮显示和URL
添加: 需求: 根据用户的权限, 决定是否,有添加按钮. 通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...
- stark组件开发之分页
""" 分页组件 """ class Pagination(object): def __init__(self, current_page ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
随机推荐
- Django后台邮箱配置
Django可以通过发送邮件的方式找回密码,具体细节可以看Django的文档,这里只介绍在settings.py中如何正确进行邮箱的相关配置. 网上很多教程都说了需要在settings.py里添加如下 ...
- Android忽略文件
转自我自己的博客...Android Studio上传项目到GitHub
- Android高级控件(下)
Chronometer计时器 常用的方法 getBase() 基准时间 setFormat 设置显示格式 start() 开始计时 stop() 停止计时 setOnChronometerListen ...
- python字典dict的成对运算
dict = {'age': 18, 'name': 'jin', 'sex': 'male', }# for k,v in dict.items():# print(k,v)# v1 = dict[ ...
- 关于 uboot 的异常向量表
ldr r,address 表示将 address 地址中的内容存入 r0 中
- Alpine Linux 使用简介
https://blog.csdn.net/csdn_duomaomao/article/details/76152416
- 获取url后面的参数的方法
1. function GetRequest() { var url = 'http://wwww.jb51.net/?q=js'; //获取url中"?"符后的字串 if (ur ...
- el-js中循环遍历el的集合
遇到问题的代码: var score=0; for(var i=0;i<${fn:length(tMovie.tComments) };i++){ score=${tMovie.tComment ...
- Linux切换工作目录命令:cd
cd [语法]cd[目录路径][详解]cd指令用于在不同目录间进行切换,前提下该帐号要有这个目录的权限.如果直接输入cd,并省略目录名,则会自动切换到用户根目录下.[参数] 选项 相应功能 目录路径 ...
- jmeter 在linux服务器的安装和运行;
linux环境下使用jmeter进行压力测试 标签(空格分隔): linux环境,jmeter linux环境下使用就meter进行压力测试: linux环境部署: 在Linux服务器先安装jdk: ...