Изменение 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)