Как мне сделать ссылку на изображения не в статической папке в Flask

Во флаконе, как мне обслуживать изображения, которых нет в статической папке?

В настоящее время я сохраняю загруженные пользователем фотографии в каталог, который находится за пределами папки фляги (на openshift, изображение в настоящее время сохраняется в папке данных под app-root/data, а файлы фляги находятся в app-root/repo/).

Как я могу использовать файлы изображений в своих шаблонах?

Используя url_for, как мне ссылаться на эти файлы изображений, которые находятся за пределами папки flask?

- data/
 |
  -- uploads/
- repo/
 |
  -- app/
    |
     -- __init__.py

Как вы можете видеть, папка данных находится за пределами папки приложения flask. Вопрос в том, как сгенерировать ссылки на файлы, хранящиеся в data/uploads (на один уровень выше) из каталога приложения flask?


person Shankar ARUL    schedule 17.11.2014    source источник
comment
Не могли бы вы представить структуру вашего проекта (дерево каталогов) и решения, которые вы уже пробовали?   -  person boh717    schedule 17.11.2014


Ответы (1)


У вас есть функция send_from_directory. что делает то, что вы хотите, я бы объявил константу с именем MEDIA_FOLDER с путем, по которому расположены файлы мультимедиа, а затем единственное, что вам нужно сделать, это вызвать функцию, подобную этой:

from config import MEDIA_FOLDER

@app.route('/uploads/<path:filename>')
def download_file(filename):
    return send_from_directory(MEDIA_FOLDER, filename, as_attachment=True)

Затем, чтобы вызвать его, вы просто делаете это:

{{ url_for('download_file', filename='dogs.jpg') }}

Дополнительную информацию об этом можно получить здесь.

person Leandro Poblet    schedule 17.11.2014
comment
Спасибо. Есть идеи, как мне получить ссылку на файл с помощью url_for? - person Shankar ARUL; 17.11.2014
comment
@sarul Я только что отредактировал сообщение, но вам просто нужно, например, {{url_for ('download_file', filename = 'dogs.jpg')}}}. - person Leandro Poblet; 17.11.2014
comment
Я пытаюсь сослаться на url_for в части src моего тега img и все еще не могу заставить его работать. Я обновил свой вопрос с файловой структурой. Я по сути пытаюсь сгенерировать пути к файлам для файлов, хранящихся в данных / загрузках, из приложения фляги, которое хранится в другом каталоге - person Shankar ARUL; 17.11.2014
comment
Проверьте свой путь MEDIA_FOLDER, потому что путь всегда должен быть, например, MEDIA_FOLDER + img / dogs.jpg, как работает URL-адрес для статического содержимого. Для структуры вашего приложения MEDIA_FOLDER должен иметь что-то вроде этого: MEDIA_FOLDER = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), 'data') - person Leandro Poblet; 17.11.2014
comment
Спасибо Леандро за это. Я жестко кодировал путь к папке мультимедиа и не мог заставить его работать. Когда я переключил его с помощью функции os.path, dirname, которую вы упомянули выше, это сработало! - person Shankar ARUL; 19.11.2014