【问题标题】:Flask conditional renderingFlask 条件渲染
【发布时间】:2021-08-01 05:12:42
【问题描述】:

我想创建“卡片”,其中包含属于几个类别的某些项目的详细信息,每张卡片都包含一个类别的项目。例如,第一张卡将包含 CategoryOne 中的所有项目,第二张卡将包含 CategoryTwo 中的所有项目。我已将项目添加到 sqlite 数据库中。每个类别都有一个名称。每个项目都有

但是,我似乎每张卡都得到相同的物品。也就是说,CategoryOne 中的项目显示在两张卡片中。

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    从您的代码看来,您似乎希望在运行查询时至少返回 2 个类别 - categories = session.query(Category).order_by(Category.name)

    但是当你开始你的循环时,你会在第一次迭代之后返回。在执行此退货之前,您将检索该特定类别的项目。这意味着发送到您的模板的数据包含所有类别并且仅包含仅属于其中一个类别的项目。

    解决问题的一种可能方法(请注意,这只是一个粗略的示例)是创建表单的字典数组 output = [{"category_name": <category_name>, "category_items": <items>}]

    然后你在你的 html 文件中循环输出,比如

    <div class="col s12 m12 l12">
      {% for k in output %}
        <div class="card">
          <div class="card-content">
            <div class="d-flex align-items-center">
          <div>
            <h5 class="card-title">{{k.category_name}}</h5>
                            
          .....
           
            <tbody class="white">
              {% for a in k.category_items %}
                <tr>    
                  ...
                      <strong>{{a.name}}</strong>
                    </p>
                    <p>
                      {{a.series}}
                    </p>
                  ...
              </td>
              <td>
                <div class="blue-grey-text text-darken-4 font-medium flow-text">
                  {{a.price}}
                </div>
              </td>
                </tr>
              {% endfor %}  
            </tbody>
          </table>
            </div>
          </div>
        </div>
      {% endfor %}
    </div>
    
    

    5 月 11 日添加更新。

    你的 python 代码应该是这样的

    @app.route('/', methods=['GET', 'POST'])
    def showList():
        output =[]
        categories = session.query(Category).order_by(Category.name)
        for c in categories:
            if c.name == 'CategoryOne':
                category_id = 1
            elif c.name == 'CategoryTwo':
                category_id = 2
            
            category = session.query(Category).filter_by(id=category_id)
            items = session.query(Item).filter_by(category_id=category_id).all()
            output.append({"category_name": c.name, "category_items": items})
            
         return render_template('index.html',output=output)
            
    
    

    【讨论】:

    • 我已根据您的评论更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2012-11-28
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多