我正在使用Dropzone.js
允許通過Flask
網站拖放上傳CSV
文件。上傳過程很好。我將上傳的文件保存到指定的文件夾中,然後可以使用df.to_html()
將dataframe
轉換爲HTML
代碼,然後將其傳遞給我的模板。它到達代碼中的那一點,但它不會呈現模板,也不會引發錯誤。所以我的問題是爲什麼Dropzone.js
阻止渲染髮生?Dropzone.js防止Flask渲染模板
我也試過只是從表中返回HTML
代碼而不是使用render_template
,但這也行不通。
初始化的.py
import os
from flask import Flask, render_template, request
import pandas as pd
app = Flask(__name__)
# get the current folder
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
@app.route('/')
def index():
return render_template('upload1.html')
@app.route('/upload', methods=['POST'])
def upload():
# set the target save path
target = os.path.join(APP_ROOT, 'uploads/')
# loop over files since we allow multiple files
for file in request.files.getlist("file"):
# get the filename
filename = file.filename
# combine filename and path
destination = "/".join([target, filename])
# save the file
file.save(destination)
#upload the file
df = pd.read_csv(destination)
table += df.to_html()
return render_template('complete.html', table=table)
if __name__ == '__main__':
app.run(port=4555, debug=True)
upload1.html
<!DOCTYPE html>
<meta charset="utf-8">
<script src="https://rawgit.com/enyo/dropzone/master/dist/dropzone.js"></script>
<link rel="stylesheet" href="https://rawgit.com/enyo/dropzone/master/dist/dropzone.css">
<table width="500">
<tr>
<td>
<form action="{{ url_for('upload') }}", method="POST" class="dropzone"></form>
</td>
</tr>
</table>
編輯
這裏是樣本csv
數據我上傳:
Person,Count
A,10
B,12
C,13
Complete.html
<html>
<body>
{{table | safe }}
</body>
</html>
你return語句是在for循環中,只有循環的第一次迭代將在返回之前運行。你爲什麼認爲Dropzone.js在做什麼? JavaScript在客戶端上運行,Flask和Jinja分別在服務器上運行。 – davidism
@davidism。你對於「for循環」的內容是正確的。我通過撤回解決了這個問題,但仍然有同樣的問題。我不確定它是否是'dropzone.js',但我相信這是由於淘汰的過程。如果我複製該路線並通過從我的硬盤讀取'csv'文件來加載'html',它可以正常工作。 – user2242044
'complete.html'的內容是什麼? – HassenPy