Более одного статического пути в локальном экземпляре Flask - PullRequest
37 голосов
/ 01 марта 2012

Можно ли добавить больше статических путей для моего локального экземпляра Flask для разработчиков?Я хочу иметь папку static по умолчанию для хранения файлов js / css / images для сайта и другой папки, например, designs для хранения моих конкретных ресурсов.Я не хочу помещать папку designs в static, если существует лучшее решение.

Ответы [ 3 ]

40 голосов
/ 01 марта 2012

Я использовал следующий подход:

# Custom static data
@app.route('/cdn/<path:filename>')
def custom_static(filename):
    return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename)

В моей конфигурации определена переменная CUSTOM_STATIC_PATH.

И в шаблонах:

{{ url_for('custom_static', filename='foo') }}

Caveat emptor - Я не совсем уверен, насколько это безопасно;)

37 голосов
/ 01 марта 2012

Вы можете использовать Blueprint со своим собственным статическим каталогом http://flask.pocoo.org/docs/blueprints/

Blueprint

blueprint = Blueprint('site', __name__, static_url_path='/static/site', static_folder='path/to/files')
app.register_blueprint(blueprint)

Шаблон

{{ url_for('site.static', filename='filename') }}
0 голосов
/ 06 марта 2019

Я хотел бы рассказать о принятом ответе выше для всех, кому интересно, на что устанавливается app.config['CUSTOM_STATIC_PATH'].

В моем случае мне понадобился /.well-known dir, и вот что я использовал:

Я поместил новый каталог в корень моего приложения с именем well-known.
Я установил конфиг var так:

CUSTOM_STATIC_PATH=app.root_path + '/well-known/'

Затем я использовал эту переменную как таковую:

@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
    return send_from_directory(app.config['CUSTOM_STATIC_PATH'], filename, conditional=True)

Установка conditional=True является умной, это будет 404 любых запросов, где файл не существует.

И, конечно, если вам интересно, зачем вам нужно устанавливать значение конфигурации для пути к каталогу, вы этого не сделаете. Вы всегда можете просто использовать значение конфига на месте, давая вместо этого это:

@app.route('/.well-known/<path:filename>')
def wellKnownRoute(filename):
    return send_from_directory(app.root_path + '/well-known/', filename, conditional=True)

Мои файлы для URL-пути /.well-known всегда собирались из корневого каталога приложения /well-known dir, поэтому нет смысла усложнять его.

И обратите внимание, что вам лучше обработать этот конкретный случай с nginx или любого другого сервера, который вы используете, настроив дополнительный блок сервера и обслуживая файл из-за пределов приложения, мне просто нужна была эта настройка для dev env для тестирования.

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