Статическая директория с флягой не работает?

Согласно readme для Flask, статические файлы blueprintname/static доступны по адресу blueprintname/static. Но по какой-то причине это не работает.

Мой план такой:

  • app/frontend/views.py:

    frontend = Blueprint('frontend', __name__, 
                         template_folder='templates',
                         static_folder='static')
    
    @frontend.route('/') etc...
    
  • app/frontend/js/app.js: мой JavaScript

  • Проект зарегистрирован в приложении Flask (маршруты работают и все)

Когда я захожу на abc.com/frontend/static/js/app.js, он просто дает 404.

Когда я следую за readme Flask, чтобы получить мои статические файлы:

<script src="{{url_for('frontend.static', filename='js/app.js')}}"></script>

Выход

<script src="/static/js/app.js"></script>

Что тоже не работает. В моей корневой папке app/static/ нет ничего.

Я не могу получить доступ к статическим файлам в моем проекте! Колба, прочитанная мной, говорит, что это должно работать!

admin = Blueprint('admin', __name__, static_folder='static')

По умолчанию самая правая часть пути находится там, где он отображается в Интернете. Поскольку папка называется статической, она будет доступна в месте расположения +/static. Скажем, проект зарегистрирован для /admin, статическая папка будет в /admin/static.

Ответы

Ответ 1

Я включаю аргумент в параметр static_url_path, чтобы убедиться, что статический путь Blueprint не конфликтует со статическим путем основного приложения.

например:

admin = Blueprint('admin', __name__, static_folder='static', static_url_path='/static/admin')

Ответ 2

Вы, вероятно, зарегистрировали свой Blueprint, чтобы сидеть в корне вашего сайта:

app.register_blueprint(core, url_prefix='')

но представление static в Blueprint ничем не отличается от всех ваших других представлений Blueprint; он использует это значение url_prefix, чтобы сделать URL уникальным.

Ядро static также активно, поэтому теперь у вас есть два маршрута, которые хотят обрабатывать URL-адреса /static/. Поэтому, если вы регистрируете свой Blueprint без префикса URL, вы должны указать один из этих двух уникальных путей.

Либо дайте Blueprint пользовательское значение static_url_path, либо ядро ​​Flask app.

Ответ 3

Это сработало для меня, инициализировав план, как эта configuration = Blueprint('configuration', __name__, template_folder='templates',static_folder='static'), а затем сослался на статический файл, подобный этому href="{{ url_for('.static', filename='css/base.css') }}". Есть точка перед статическим в href.

Ответ 4

Это вышеупомянутые решения не помогли мне. Я должен был добавить как static_folder и static_url_path, а затем использовать blueprint_name.static в url_for, следующим образом:

user_blueprint = Blueprint('users_section', __name__, template_folder='templates', static_folder='static', static_url_path='/user')

HTML код:

<script src={{ url_for('users_section.static', filename='js/particles.min.js') }}></script>