Flask blueprint static directory does not work?

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.


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 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!

Tags:

Python

Flask