Reading a CSV file in Flask and iterating through Jinga2

北城余情 提交于 2021-01-28 10:25:15

问题


I am trying to display data on my web app from a CSV file using Flask. The below code reads my CSV file and assigns stocklist as the variable for my data. In the HTML code below it, using jinga logic, I iterate through stocklist however my CSV columns are returned as rows (see sample output and pic). How do I display the rows correctly?

My python function:

@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)

My web app for iterating through stocklist:

            <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>

Output:


回答1:


Haks, i removed the nested loop and added the list position in each value to fix it. Works now.

          <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> 

output enter image description here




回答2:


You shouldn't flatten the list.

Try this:

@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)

Then for the Jinja template:

            <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>


来源:https://stackoverflow.com/questions/54854498/reading-a-csv-file-in-flask-and-iterating-through-jinga2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!