代码之家  ›  专栏  ›  技术社区  ›  Dallo81

如何阻止我的Jinja循环创建重复项?

  •  0
  • Dallo81  · 技术社区  · 1 年前

    我有数据是从一个网站上刮来的,在两个单独的列表中。我正在用Jinja循环列表,以输出到html中<h2>并且<p>。(参见代码示例)示例1:这是我的python代码,使用Flask为我的页面提供服务。

    @app.route('/campervans')
    def campers():
        van_headings = [title.getText() for title in title]
        contents = [content.getText().strip() for content in content]
        titles = [van_headings[i] for i in range(0, len(van_headings))]
        data = [contents[i] for i in range(0, len(contents))]
        return render_template('campers.html',
                               titles=titles, data=data,
                               )
    

    html和Jinja代码:

      <br/>
    
        <div class="row featurette">
          <div class="col-md-7"><br/>
    
              {% for title in titles %}
              {%for x in data%}
            <h2 class="featurette-heading fw-normal lh-1">{{title}}</h2>
              <p class="lead">{{x}}</p>
                {% endfor %}
                {%endfor%}
    

    而不是呈现为:标题1数据1标题2数据2等。它出现了:标题1 Data 1标题1 Data 2标题2 Data 1标题2 Data 2等。。。

    我试过移动精灵环

     <div class="row featurette">
          <div class="col-md-7"><br/>
    
              {% for title in titles %}
            <h2 class="featurette-heading fw-normal lh-1">{{title}}</h2>
              {%endfor%}
              {%for x in data%}
              <p class="lead">{{x}}</p>
                {% endfor %}
    

    这会将所有标题分组在一起,然后显示所有数据。在这种配置中没有重复,但它不是我想要的格式

    1 回复  |  直到 1 年前
        1
  •  1
  •   Roger Lindsjö    1 年前

    您可以在其中一个列表上循环,并使用第一个循环的索引从第二个列表中获取特定元素。

    {% for title in titles %}
        <h2 class="featurette-heading fw-normal lh-1">{{title}}</h2>
        <p class="lead">{{data[loop.index0]}}</p>
    {% endfor %}
    

    中高音

        <p class="lead">{{data[loop.index -1]}}</p>
    

    Jinja有 loop.index0 其在0开始计数,并且 loop.index 其在1开始计数。

    或者,不使用两个列表,而是使用包含相关标题和数据的项目构建一个列表。

    推荐文章