Статическая директория с флягой не работает?
Согласно 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>