Изменение URL-адреса по умолчанию на static-media во Flask

Я создал веб-сайт с использованием Flask, и у меня нет проблем с настройкой работы на встроенном сервере разработки. Я также смог запустить все на моем рабочем сервере под mod_wgsi. Тем не менее, я размещаю свой статический носитель из приложения static/CGI/PHP-5.2 и не могу заставить Flask "увидеть" его, не изменив вручную все URL-адреса в моих html-файлах.

Кажется, проблема в том, что базовая настройка Flask предполагает, что статические файлы находятся внутри приложения колбы. Смотрите здесь для деталей. По сути, я думаю, что мне нужно изменить URL-адрес "статической" части следующей строки:

<link rel="stylesheet" href="{{url_for('static', filename='css/print.css')}}" type="text/css" media="print"/> 

Похоже, я могу изменить это в init.py, инструкции здесь, но определение static_path следующим образом, похоже, не работает.

app = Flask(__name__, static_path = '/web_media')

Для ясности, если я вручную определю свой URL-адрес следующим образом:

<link rel="stylesheet" href="/web_media/css/print.css" type="text/css" media="print"/>

все отлично работает Любая помощь будет принята с благодарностью.

3 ответа

Решение

Если это производственная настройка, Flask не должен показывать ваш статический контент; веб-сервер (nginx, apache, cherokee и т. д.) должен обрабатывать это, поскольку он более эффективен в обработке этих типов операций, чем процесс python. Судя по его звукам (на основе ссылки на mod_wsgi), вы используете apache, так что вы можете изменить свой конфигурационный файл для обслуживания статического содержимого из static/CGI/PHP-5.2 с помощью apache.

Предполагая, что "web_media" является каталогом в несколько вымышленном каталоге /var/www/static/CGI/PHP-5.2 и содержит ваш css/js/etc. активы. В вашем конфигурационном файле, в области, где вы настраиваете это приложение, добавьте что-то вроде.

Alias /web_media/ /var/www/static/CGI/PHP-5.2/web_media/

<Directory /var/www/static/CGI/PHP-5.2/web_media>
  Order deny,allow
  Allow from all
</Directory>

Прошло много времени с тех пор, как я использовал / настроил apache, поэтому нет никаких гарантий, что вышеперечисленное будет отлично работать с первого раза. Но главное - использовать веб-сервер для обработки статического носителя.

Override static_folder вместо.

app = Flask(__name__, static_folder = '/web_media')

Для производственной среды вы должны обслуживать ваши статические файлы через http-сервер (например, nginx/apache). См. Ответ Филиппа Саутама выше.

Тем не менее, бывают случаи, когда вы используете сервер werkzeug (например, dev / testing). В этом случае есть 2 ключевых аргумента, на которые нужно посмотреть:

  • static_folder: физическое расположение в файловой системе. Если это относительный путь, то он относительно корневого каталога проекта.
  • static_url_path: это путь поиска для статического контента.

Например, если у меня есть статический файл, расположенный в /path/to/static/files/myfile.jpg, с /path/to/static/files как статический корень файла, и вы хотите получить к нему доступ через http://example.com/mystatic/myfile.jpg, Я сделаю следующее:

from flask import Flask

app_name = __name__
app = Flask(app_name, static_folder='/path/to/static/files', static_url_path='/mystatic')

Предполагая, что вы используете колбу версии 0.7 или выше (в настоящее время 0.11.1)

Другие вопросы по тегам