在Flask中读取CSV文件并通过Jinga2进行迭代

时间:2019-02-24 17:23:07

标签: python python-3.x flask jinja2

我正在尝试使用Flask从CSV文件在Web应用程序上显示数据。以下代码读取了我的CSV文件,并将库存清单分配为我的数据变量。在下面的HTML代码中,使用jinga逻辑,我遍历了库存清单,但是我的CSV列作为行返回(请参见示例输出和图片)。如何正确显示行?

我的python函数:

@app.route('/stocks')
def Stocks():
    filename = 'stock_scraper - dev.csv'
    data = pandas.read_csv(filename, header=0)
    stocklist = list(data.values.flatten())
    return render_template('stocks.html', stocklist=stocklist)

我的Web应用程序用于遍历库存清单:

            <table class="table table-striped table-sm">
              <thead>
                <tr>
                  <th>#</th>
                  <th>Ticker</th>
                  <th>Closing Price</th>
                  <th>Closing Date</th>
                </tr>
              </thead>
              <tbody>
                {% for eachstocks in stocklist%}
                <tr>
                  <td>{{ eachstocks }}</td>
                  <td>{{ eachstocks }}</td>
                  <td>{{ eachstocks }}</td>
                  <td>{{ eachstocks }}</td>
                </tr>
                {% endfor %}
              </tbody>
            </table>

输出: table

2 个答案:

答案 0 :(得分:0)

您不应该将列表弄平。

尝试一下:

@app.route('/stocks')
def Stocks():
    filename = 'stock_scraper - dev.csv'
    data = pandas.read_csv(filename, header=0)
    stocklist = list(data.values)
    return render_template('stocks.html', stocklist=stocklist)

然后输入Jinja模板:

            <table class="table table-striped table-sm">
              <thead>
                <tr>
                  <th>#</th>
                  <th>Ticker</th>
                  <th>Closing Price</th>
                  <th>Closing Date</th>
                </tr>
              </thead>
              <tbody>
                {% for value in stocklist%}
                <tr>
                  <td>{{ value[0] }}</td>
                  <td>{{ value[1] }}</td>
                  <td>{{ value[2] }}</td>
                  <td>{{ value[3] }}</td>
                </tr>
                {% endfor %}
              </tbody>
            </table>

答案 1 :(得分:0)

好吧,我删除了嵌套循环,并在每个值中添加了列表位置以对其进行修复。现在可以工作。

          <tbody>
            {% for value in stocklist %}
                <tr>
                  <td>{{ value[0] }}</td>
                  <td>{{ value[1] }}</td>
                  <td>{{ value[2] }}</td>
                  <td>{{ value[3] }}</td>
                </tr>
            {% endfor %}
          </tbody> 

输出 enter image description here

相关问题