stark组件开发之组合搜索基本显示
数据的获取,上一篇,已经有了!然后就是,如何进行展示的问题。
到了展示这里,又有了新的问题, 因为从数据库,取得的数据。 分为 queryset 和 tuple 两种数据结构。
tuple 中,只是字符串。 queryset中确实,model对象。
而且 这些渲染出来后,全部都是 a 标签。 是可以点击的, 所以 href 超链接属性,是必须要有的。 而且还有一点是,默认选中。
用户选择之后, 应该有一个提示,我当前选择的是那个标签。 而且因为组合搜索,先选中的条件,不能够被刷新。
这种的 如果依靠模板做的话,也可以。但是代码就过于繁琐了。
所以,决定这件事由,后端 python 代码来实现, 实现的方式,还是通过。 类。 生成对象来实现:
在这里先,抛出一个知识点: 可迭代对象:
这张图片展示的是,不可迭代对象。 如果视图对这个对象。进行迭代。 是会报错的。
那么,该怎么搞呢?
定义: 如果一个类中,定义了 def __iter__ (self) 方法。且该方法返回一个 迭代器 iterator。 那么就称该类实例化的对象为一个可迭代对象。 那么这个对象就可以被循环。
迭代器和生成器。 生成器也是一种特殊的迭代器。 yield
这时, 你会发现。 11 22 33 被打印出来了!
而且这里,不一定非要是 [11,22,33,] iter 函数里面。 可以随便定义。 只要返回值,是一个 迭代器就可以。
so, 我在模板中,对这个类实例化的对象。进行 for 循环。 不就可以拿到它里面的值了吗?
看例子:
成功的在,页面展示了。所有的数据。 注意: 财务 和 CEO 虽然显示的是,字符串。 是因为我在 model 的类中, 定义了 __str__
,其实 他是一个对象。
这样,我们就可以在。 这了 __iter__ 方法里面。进行判断。 当前数据的类型。 从而返回不同的数据。
而模板中就只需要,一个 简单的, 两层循环, 就能完成。 想要的工作。
so 我这里使用。 yield 生成器的方式。 来做这件事:
class SearchGroupRow(object):
def __init__(self, queryset_or_tuple):
self.queryset_or_tuple = queryset_or_tuple def __iter__(self):
# if isinstance(self.queryset_or_tuple, list):
# for item in self.queryset_or_tuple:
# yield "<a href='#'>%s</a>" % item[1]
# else:
# for item in self.queryset_or_tuple:
# if isinstance(item, Model):
# print(item)
# yield "<a href='#'>%s</a>" % item
for item in self.queryset_or_tuple:
if isinstance(item, tuple):
yield "<a href='#'>%s</a>" % item[1]
else:
yield "<a href='#'>%s</a>" % item
# 这里两种方式, 都可以。完成 这个工作。
{% for row in search_group_row_list %}
{% comment %}row是queryset 或者 元组{% endcomment %}
<div>
{% for item in row %}
{{ item|safe }}
{% endfor %}
</div>
{% endfor %}
OK 成功。
stark组件开发之组合搜索基本显示的更多相关文章
- stark组件开发之组合搜索高级显示和扩展
上一篇,我只是做了. 默认的显示. def __iter__(self): '''默认显示. 用户可以自定制''' if isinstance(self.queryset_or_tuple, list ...
- stark组件开发之组合搜索页面效果和 URL
页面效果,只是样式.这个好解决!yield 的时候. 返回几个样式出去就好了! 并且前端写上一些样式的css {% if search_group_row_list %} <div class= ...
- stark组件开发之组合搜索实现思路
- 关键字搜索. 可以做到的效果是, 输入20. 后太通过 Q() 函数. 来实现. 搜索是一个大的问题点. - 要想实现组合搜索, 首先要 明确的一点是. 在我当前的页面上, 正在进行展示的是 ...
- stark组件开发之关键搜索
- 模糊搜索: 在页面生成一个表单. 以get 方式, 将数据提交到.当前查看页面. 后台接收数据,然后进行筛选过滤. 着个也需要,用户自定制! 定义一个 search_list 这个值,默 ...
- stark组件开发之列表页面定制列
先看一张页面展示的效果图: 看一看我的 model 表!是什么样子: 看一看数据库是什么样子: 看 页面展示图,有表头. 有数据.模型表中,每一个字段, 都指定了 verbose_name. 如何解 ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- 轮播组件/瀑布流/组合搜索/KindEditor插件
一.企业官网 ### 瀑布流 Models.Student.objects.all() #获取所有学员信息 通过div进行循环图片和字幕 1.以template模板方法实现瀑布流以列为单位 ...
- stark组件开发之添加按钮显示和URL
添加: 需求: 根据用户的权限, 决定是否,有添加按钮. 通过配置进行定制,预留钩子进行权限的判断. class StartHandler(object): .................... ...
- stark组件开发之列表页面预留钩子方法。 可根据用户的不同,显示不同的列
要实现,这个方法.子类中 list_diplay 这个列表, 就不能够写死.他应该是 可以根据.用户的不同,返回不同的值. 所以 就需要一个函数, 可以进行判断当前用户是谁. 并且往这个列表中添加,他 ...
随机推荐
- Linux下安装docker(1)
1.由于centos系统已经自带docker源了,所以可以直接安装: yum install docker 如果是centos6.5版本的,使用yum -y install docker-io 进行安 ...
- VUE插件总结
亲们支持我的新博客哦==>地址(以后更新会尽量在新博客更新,欢迎大家访问加入我的后宫w) ) UI组件 element - 饿了么出品的Vue2的web UI工具套件 Vux - 基于Vue和W ...
- ubuntu下的git版本创建
一.git的特点 二.gei的安装和配置 1.安装命令如下 sudo apt-get install git 2.安装成功后输入 git 3.创建版本库 git init 4.使用 先创建一个txt文 ...
- when to use reinterpret_cast
写的太好了.. When you convert for example int(12) to unsigned float (12.0f) your processor needs to invok ...
- Anatomy of a Database System学习笔记 - 概论、并发控制
<Anatomy of a Database System>这篇发表于87年.一共48页的论文据说是DBA入门必看,但是找了全网没有找到中文翻译.这篇文章对关系型数据库确实有提纲挈领的作用 ...
- vue文件上传
今天写一个文件上传的功能,开始想用element-ui的组件写,但是发现不知道怎么把文件标题和内容一起上传,所以用了经典的input框上传. 废话不多说,直接上代码. 这是表单: <el-for ...
- pydev+Eclipse搭建教程
学习Python一直用IDLE,一直再想有没有一种类似Eclipse那样软件可以编辑Python.遂在Eclipse上安装pydev 本文是在Eclipse环境已搭建好的基础上进行pydev的插件安装 ...
- [SQL][MS SQL]ID自增列从1开始重新排序
数据库中把ID自增长重置成1: 一般做法:(太麻烦) 复制表数据->删除原表.新建一张表->粘贴: 新方法: 数据库中:新建查询->复制.粘贴一下代码->修改表名,执行即可(先 ...
- VUE系列一:VUE入门:搭建脚手架CLI(新建自己的一个VUE项目)
一.VUE脚手架介绍 官方说明:Vue 提供了一个官方的 CLI,为单页面应用快速搭建 (SPA) 繁杂的脚手架.它为现代前端工作流提供了 batteries-included 的构建设置.只需要几分 ...
- 颜色空间之CIE2000色差公式
CIEDE2000色差公式 为了进一步改善工业色差评价的视觉一致性,CIE专门成立了工业色差评价的色相和明度相关修正技术委员会TC1-47(Hue and Lightness Dependent ...