According to the Flask readme, blueprint static files are accessible at blueprintname/static
. But for some reason, it doesn\'t work.
My blueprint is lik
I am using Flask blueprints.
My web app Attendance Manager has three types of users, admin, teacher and student.
Here is how a part of the file structure looks:
+---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') }}">
Adding 'the_name_of_the_blueprint.static' to the first parameter of url_for() in the student-login-page.html (or wherever you are linking your css) helped me resolve the problem.
Found the solution here, in the official docs.
This GitHub issue or this Reddit post might help you if this did not resolve your problem.
All the best!
I include an argument to the static_url_path parameter to ensure that the Blueprint's static path doesn't conflict with the static path of the main app.
e.g:
admin = Blueprint('admin', __name__, static_folder='static', static_url_path='/static/admin')
You probably registered your Blueprint to sit at the root of your site:
app.register_blueprint(core, url_prefix='')
but the static
view in the Blueprint is no different from all your other Blueprint views; it uses that url_prefix
value to make the URL unique.
The core static
view is also active, so you now have two routes that want to handle /static/
URLs. So if you are registering your Blueprint without a URL prefix, you have to give one of these two a unique path.
Either give the Blueprint a custom static_url_path
value, or the core Flask app
.
I'm a little late, but none of the previous answers did really help me in achieving what I needed. I found out that I needed to do a bit of "tricks" to make the module's static folder work as I intended. My application is composed of several modules, but for now just pretend we had "application" as the main application folder and "locations" as the module's folder where a local "static" directory is placed (where we need to load static files for this module). The following is what I did:
__init__py
file I added url_prefix='/'
to my Blueprint's definitionroutes.py
file I used both static parameters: static_folder='static'
and 'static_url_path='/locations/static'
to declare the Blueprint{{url_for('locations_bp.static', filename='css/style.css')}}
(locations_bp
is my Bluprint's name for "locations" module)This way, the css file is loaded as /locations/static/css/style.css
and this is exactly what I wanted to achieve: above all, the url_prefix I used allows me to avoid having a prefix on all my module's routes
It worked for me by initializing blueprint like this:
configuration = Blueprint('configuration', __name__, template_folder='templates',static_folder='static')
Then referencing to static file like this
href="{{ url_for('.static', filename='css/base.css') }}"
There is a dot before static in href.