Flask条件渲染

2024-09-30 20:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一张“卡片”,上面有一些物品的详细信息,这些物品分为几个类别,每张卡片包含一个类别的物品。例如,第一张卡将包含CategoryOne中的所有项目,第二张卡将包含CategoryT2中的所有项目。我已将这些项添加到sqlite数据库中。每个类别都有一个名称。每一项都有

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


Tags: 项目名称数据库sqlite详细信息物品类别categoryone
1条回答
网友
1楼 · 发布于 2024-09-30 20:29:08

从代码来看,在运行查询时,您似乎希望至少返回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)
        

相关问题 更多 >