zoukankan      html  css  js  c++  java
  • 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  成功。

  • 相关阅读:
    xcode Git
    The OAuth 2.0 Authorization Framework
    Apache Commons 工具集介绍
    遍历map
    ClassLoader 提供了两个方法用于从装载的类路径中取得资源:
    转:mysql 索引
    StringBuilder与StringBuffer
    第四次作业
    Java Class 与 Object
    软件测试中条件覆盖,路径覆盖,语句覆盖,分支覆盖的区别
  • 原文地址:https://www.cnblogs.com/chengege/p/10744787.html
Copyright © 2011-2022 走看看