According to the Flask readme,蓝图静态文件可在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
当我转到abc.com/frontend/static/js/app.js
时,它只会给出404。
当我按照Flask自述文件获取我的静态文件时:
<script src="{{url_for('frontend.static', filename='js/app.js')}}"></script>
输出
<script src="/static/js/app.js"></script>
哪个也不起作用。我的根app/static/
文件夹中没有任何内容。
我无法访问我的蓝图中的任何静态文件! Flask读到我说它应该有效!
admin = Blueprint('admin', __name__, static_folder='static')
默认情况下,路径的最右边部分是在Web上公开的位置。由于该文件夹在此处称为静态,因此它将在蓝图+ / static的位置可用。假设蓝图已注册为/ admin,静态文件夹将位于/ admin / static。
答案 0 :(得分:17)
您可能已将您的蓝图注册为您网站的根目录:
app.register_blueprint(core, url_prefix='')
但蓝图中的static
视图与您的所有其他蓝图视图没有区别;它使用url_prefix
值来使URL唯一。
核心 static
视图也处于活动状态,因此您现在有两条想要处理/static/
网址的路由。因此,如果您在没有URL前缀的情况下注册Blueprint,则必须为这两个中的一个提供唯一的路径。
为蓝图提供自定义static_url_path
值或核心Flask app
。
答案 1 :(得分:16)
我在static_url_path参数中包含一个参数,以确保Blueprint的静态路径不会与主应用程序的静态路径冲突。
e.g:
admin = Blueprint('admin', __name__, static_folder='static', static_url_path='/static/admin')
答案 2 :(得分:5)
通过初始化此configuration = Blueprint('configuration', __name__, template_folder='templates',static_folder='static')
之类的蓝图,然后引用静态文件(例如href="{{ url_for('.static', filename='css/base.css') }}"
),它对我有用。在href中静态之前有一个点。
答案 3 :(得分:2)
我正在使用Flask蓝图。
我的网络应用Attendance Manager具有三种类型的用户:管理员,教师和学生。
这是文件结构的一部分的外观:
+---app.py
|
|
+---student
| | student.py
| | __init__.py
| |
| +---static
| | +---css
| | | login-page.css
| | | signup-page.css
| | |
| | \---js
| | firebaseConfig.js
| |
| +---templates
| | base.html
| | student-login-page.html
| | student-signup-page.html
app.py:
app.register_blueprint(student, url_prefix='/student')
student.py:
student = Blueprint('student', __name__, static_folder='static', template_folder='templates')
student-login-page.html:
<link rel="stylesheet" type="text/css" href="{{ url_for('student.static', filename='css/login-page.css') }}">
将“ the_name_of_the_blueprint.static”添加到student-login-page.html中url_for()的第一个参数中(或您链接CSS的任何位置)可以帮助我解决问题。
在官方文档中找到了解决方案here。
This GitHub问题或this Reddit帖子可能无法帮助您解决问题。
祝一切顺利!
答案 4 :(得分:1)
我来晚了一点,但是以前的答案都没有真正帮助我实现所需的知识。我发现我需要做一些“技巧”以使模块的静态文件夹按我的预期工作。 我的应用程序由几个模块组成,但是现在假装我们将“ application”作为主应用程序文件夹,将“ locations”作为模块的文件夹,该文件夹中放置了本地“ static”目录(为此,我们需要在其中加载静态文件)模块)。以下是我所做的:
__init__py
文件中,我在蓝图的定义中添加了url_prefix='/'
routes.py
文件中,我同时使用了两个静态参数:static_folder='static'
和'static_url_path='/locations/static'
来声明蓝图{{url_for('locations_bp.static', filename='css/style.css')}}
(locations_bp
是我的Bluprint的“位置”模块这样,将css文件加载为/locations/static/css/style.css
,这正是我想要实现的目标:首先,我使用的url_prefix允许我避免在模块的所有路由上都添加前缀
答案 5 :(得分:0)
上述解决方案对我不起作用。我必须同时添加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>