Изменение URL-адреса по умолчанию на static-media во Flask - PullRequest
9 голосов
/ 11 мая 2011

Я создал сайт, используя 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 ]

6 голосов
/ 25 мая 2013

Вместо static_folder.

app = Flask(__name__, static_folder = '/web_media')
4 голосов
/ 11 мая 2011

Если это производственная установка, 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, поэтому нет никаких гарантий, что вышеперечисленное будет отлично работать в первый раз. Но главное - использовать веб-сервер для обработки статического носителя.

1 голос
/ 26 октября 2016

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

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

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

Например, если у меня статический файл, расположенный по адресу /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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...