2017-01-24 3 views
1

Ich bin neu in Flask. Ich versuche, Download-Liste von/var/Verzeichnis-Dateien zu machen, aber Ich kann keine Möglichkeit finden, diesen Link zu machen. jede Datei könnte in diesem Verzeichnis sein, so dass tempfile dieses Problem lösen könnte. ich kenne die Datei nicht, so kann ich nicht Datei in Flask-Verzeichnis kopieren, könnte mir jemand sagen, wie kann ich Download-Link für Datei so machen?Datei von einem anderen Verzeichnis herunterladen In Flask

+1

Sehen Sie sich [send_file()] (http://flask.pocoo.org/docs/0.12/api/#flask.send_file) und [send_from_directory()] (http: // flash) an k.pooco.org/docs/0.12/api/#flask.send_from_directory) – MrLeeh

+0

vielen Dank. Ich versuche send_file, aber ich kann es nicht funktionieren, aber nach Ihrem Vorschlag benutze ich send_from_directory und das funktionierte wie ich will. Danke vielmals – Rome

Antwort

2

Ich habe nie Flasche verwendet, aber habe etwas Erfahrung mit Django. Wenn Sie sich die flask docs (rendering_templates) ansehen, müssen Sie eine Kontextvariable an die Renderfunktion übergeben und sie dann zur jinja Vorlage hinzufügen.

Ich würde auch vorschlagen, einen anderen Ordner zu benennen, um Downloads zu platzieren, da Benutzer Zugriff auf Ihren/var/Ordner geben können, ein Sicherheitsrisiko darstellen.

Siehe unten:

import os 

from flask import Flask, render_template 

app = Flask(__name__) 

dloads_dir = '/var/www/mysite/downloads/' 
dloads = os.listdir(dloads_dir).sort() 
dloads_src = ['/downloads/{}'.format(i) for i in dloads] 

@app.route('/Downloads') 
def list_downloads(): 

    return render_template('downloads.html', dloads=dloads, dloads_src=dloads_src) 

dann in den HTML-Code (sollte ich sagen Jinja2) Vorlage:

<!doctype html> 
<title>Hello from Flask</title> 
{% for file in dloads %} 
    <a href="{{ dloads_src[loop.index0] }}" download>{{ file }}</a> 
{% endfor %} 
</html> 

Here's where I found the loop.index method

(1) Edit: Feste mein schlechtes html

Verwandte Themen