先看一张页面展示的效果图:

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

看一看数据库是什么样子:

看 页面展示图,有表头。 有数据。
模型表中,每一个字段, 都指定了 verbose_name。

如何解决?

  1. 每个子类中,自定义 list_display 用于指定, 需要展示。 表中的哪个字段(这个名字和表中的字段需要,对应上。 不能错。)
    class UserInfoHandler(StartHandler):
  2. list_display = ["name", "age", "depart"] # 定义表头显示字段
  3.  
  4. site.register(models.UserInfo, UserInfoHandler)
  1. 基类中 指定一个变量。 list_display = [] 该变量。在子类指定之后。 对象调用时,就会是子类中的 list_display = [......]
    class StartHandler(object):
  2. list_display = []
  3.  
  4. def __init__(self, model_class, prve):
  5. self.model_class = model_class
  6. self.prev = prve
  7.  
  8. def check_list_view(self, request):
  9. '''
  10. 列表查看页面
  11. :param request:
  12. :return:
  13. '''
  14. # 页面要显示的列 self.list_display 示例:['name', 'age', 'depart']
  15.  
  16. # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
  17. # self.model_class._meta.get_field('name').verbose_name
  18. header_list = [] # 表头
  19. for name in self.list_display:
  20. verbose_name = self.model_class._meta.get_field(name).verbose_name # 获取到 verbose_name 放入列表中
  21. header_list.append(verbose_name)
  22.  
  23. # 2. 处理 从数据库 取到的数据 # 用户访问的表 self.model_class
  24. data_list = self.model_class.objects.all()
  25.  
  26. body_list = [] # 整体的body
  27. for row in data_list:
  28. row_list = [] # 每一行要展示的内容
  29. for key in self.list_display:
  30. row_list.append(getattr(row, key)) # row是个model类对象,使用getattr 获取值
  31. body_list.append(row_list) # 将每一行,添加到 body_list 中。
  32.  
  33. return render(request, "changelist.html",
  34. {"header_list": header_list, "data_list": data_list,
  35. "body_list": body_list})

row_list.append(getattr(row, key))  一定要使用 getattr方法。 不能使用 句点符。

比如 row_list.append(row.key)  . 这样做。在去找外键的时候。 是会报错的。

stark组件开发之列表页面默认显示列:
上面的代码中,基类中的  list_display=[]  所以, 用户就必须要,自己写一个字类,并指定display列表。 才可以使用此功能。
所以需要一个默认展示的功能:

  1. class StartHandler(object):
  2. list_display = []
  3.  
  4. def __init__(self, model_class, prve):
  5. self.model_class = model_class
  6. self.prev = prve
  7.  
  8. def check_list_view(self, request):
  9. '''
  10. 列表查看页面
  11. :param request:
  12. :return:
  13. '''
  14. # 页面要显示的列 self.list_display 示例:['name', 'age', 'depart']
  15.  
  16. # 1. 制作表头, 就是每张表中,每个字段写的 verbose_name.。 如何获取到这个值呢?
  17. # self.model_class._meta.get_field('name').verbose_name
  18. header_list = [] # 表头
  19. if self.list_display:
  20. for name in self.list_display:
  21. verbose_name = self.model_class._meta.get_field(name).verbose_name
  22. header_list.append(verbose_name)
  23. else:
  24. header_list.append(self.model_class._meta.model_name)
  25.  
  26. # 2. 处理 从数据库 取到的数据 # 用户访问的表 self.model_class
  27. data_list = self.model_class.objects.all()
  28.  
  29. body_list = []
  30. for row in data_list:
  31. row_list = []
  32. if self.list_display:
  33. for key in self.list_display:
  34. row_list.append(getattr(row, key))
  35. else:
  36. row_list.append(row)
  37. body_list.append(row_list)
  38.  
  39. return render(request, "changelist.html",
  40. {"header_list": header_list, "data_list": data_list,
  41. "body_list": body_list})

默认展示功能,如果用户自己没有,指定 list_display。 默认展示对象就行了。

stark组件开发之列表页面定制列的更多相关文章

  1. stark组件开发之列表页面应用示例

    已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把!  应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的  <a href="/ ...

  2. stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列

    要实现,这个方法.子类中 list_diplay 这个列表, 就不能够写死.他应该是 可以根据.用户的不同,返回不同的值. 所以 就需要一个函数, 可以进行判断当前用户是谁. 并且往这个列表中添加,他 ...

  3. stark组件开发之列表页面自定义函数扩展

    对于展示页面, 可能需要显示一些. 数据库中,没有的字段. 比如, 删除按钮, 编辑按钮.  这个数据库,是没有的. 所以,可能就需要, 添加一个这个东西.  比如我在渲染的时候, 给他添加两个函数进 ...

  4. stark组件开发之编辑功能实现

    编辑功能.和添加一样! 唯一不同的就是, 需要编辑一个指定的  记录.这就需要,在列表页面, 渲染编辑的时候,添加一个 id 值: class UserInfoHandler(StartHandler ...

  5. stark组件开发之组合搜索页面效果和 URL

    页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...

  6. stark组件开发之添加按钮显示和URL

    添加: 需求: 根据用户的权限, 决定是否,有添加按钮.  通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...

  7. stark组件开发之分页

    """ 分页组件 """ class Pagination(object): def __init__(self, current_page ...

  8. ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区

    前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...

  9. stark组件开发之组合搜索实现思路

    - 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q()  函数. 来实现.  搜索是一个大的问题点. -  要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...

随机推荐

  1. LeetCode OJ 24. Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2-&g ...

  2. linux文件和目录的删除、新建、移动等操作

    在Linux下进行切换目录   cd 在Linux下查看当前目录下的内容   ls.  ll.  ls -al 如何显示当前命令所在的目录路径   pwd 在Linux下创建目录   mkdir 在L ...

  3. Delphi XE3通过ADOConnection 连接 MySQL 5.5.27 数据库

    Delphi XE3通过ADOConnection 连接 MySQL 5.5.27 数据库 unit Unit1; interface uses Winapi.Windows, Winapi.Mess ...

  4. 扩展saltstack组件

    一.扩展Grains 我们知道,grains可以帮助收集minion端的静态信息.在更为复杂的业务环境中,可以使用自定义的grains帮助收集真实需要的静态或者业务信息; grains流程:  mas ...

  5. (转)NHibernate+MySql常见问题

    http://blog.51cto.com/4837471/1567675 版本: NHibernate :NHibernate 4.0.1GA MySql:MySql 5.0.1 常见问题一: “N ...

  6. jdk动态代理和cglib动态代理

    参考: http://www.importnew.com/22015.html Java动态代理 上面的代码运行的结果为: I'm proxy! Welcome oschina hosee's blo ...

  7. 电脑cpu100%的原因

    这个本地系统占很高的cpu,主要原因是我关机之后,没有关透又重启了,就是管了机之后等10几秒再开机会好

  8. svn 更新lib库时,报错

    svn: E195012: Unable to find repository location for svn:// in revision 9718 Can't revert without re ...

  9. wget 报错 OpenSSL: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failur

    解决办法 换成 curl -O -L xxxxxxxx

  10. jvm 几个invoke 指令

    invokestatic : 调用静态方法 invokespecial : 调用实例构造器<init>方法, 私有方法和父类方法 invokevirtual : 调用虚方法 invokei ...