2017-01-24 5 views
1

Im New In Flask. Я пытаюсь сделать список загрузки файлов/var/directory, но Я не могу найти способ сделать эту ссылку. любой файл может находиться в этом каталоге, поэтому tempfile может решить эту проблему. Я не знаю файл, поэтому я не могу скопировать файл в флеш-каталог, может ли кто-нибудь сказать мне, как я могу сделать ссылку для скачивания для файла?Скачать файл из другого каталога в колбе

+1

Посмотрите на [send_file()] (http://flask.pocoo.org/docs/0.12/api/#flask.send_file) и [send_from_directory()] (http: // flas k.pocoo.org/docs/0.12/api/#flask.send_from_directory) – MrLeeh

+0

спасибо большое. Я пытаюсь send_file, но я не могу заставить его работать, но после вашего предложения я использую send_from_directory, и это сработало, как я хочу. большое спасибо – Rome

ответ

2

Я никогда не использовал колбу, но имею некоторый опыт работы с Django. Из быстрого поиска документов с флягами (rendering_templates) вам нужно передать переменную контекста функции рендеринга, а затем добавить ее в шаблон jinja.

Я бы также предложил назначить другую папку для размещения загрузок, поскольку предоставление пользователям доступа к вашей папке/var/может представлять проблему безопасности.

Смотрите ниже:

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) 

Тогда в HTML (я должен сказать Jinja2) Шаблон:

<!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: Фиксированный мой плохой HTML