Używam Dropzone.js
, aby umożliwić przeciąganie i upuszczanie przesyłanie plików CSV
za pośrednictwem strony internetowej Flask
. Proces przesyłania działa świetnie. Zapisuję przesłany plik w określonym folderze i mogę następnie użyć df.to_html()
, aby przekonwertować kod dataframe
na HTML
, który następnie przekazuję do mojego szablonu. Przechodzi do tego punktu w kodzie, ale nie renderuje szablonu i nie są zgłaszane żadne błędy. Moje pytanie brzmi: dlaczego Dropzone.js
uniemożliwia wykonanie renderowania?Dropzone.js uniemożliwia Flask z renderowania szablonu
Próbowałem również po prostu zwrócić kod HTML
ze stołu i nie używając render_template
, ale to również nie działa.
startowych .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>
EDIT
Oto przykładowe dane csv
ja przesłaniem:
Person,Count
A,10
B,12
C,13
Complete.html
<html>
<body>
{{table | safe }}
</body>
</html>
Twoja instrukcja return jest wewnątrz pętli for, tylko pierwsza iteracja pętli będzie biegać przed powrotem. Jak myślisz, dlaczego Dropzone.js coś robi? JavaScript działa na kliencie, Flask i Jinja działają na serwerze osobno. – davidism
@davidism. Masz rację, jeśli jesteś w "pętli for". Naprawiłem to przez backdenting, ale nadal mam ten sam problem. Nie wiem na pewno, że to "dropzone.js", ale uważam, że jest to spowodowane procesem eliminacji. Jeśli skopiuję tę trasę i załaduję 'html' z odczytu pliku' csv' z mojego dysku twardego, to działa dobrze. – user2242044
jaka jest zawartość "complete.html"? – HassenPy