Blueprints help organize your Flask app by grouping routes and templates. They make your code cleaner and easier to manage.
Blueprint routes and templates in Flask
from flask import Blueprint, render_template bp = Blueprint('bp_name', __name__, template_folder='templates') @bp.route('/path') def view_func(): return render_template('template.html')
The first argument is the blueprint's name, used internally.
template_folder tells Flask where to find templates for this blueprint.
from flask import Blueprint, render_template user_bp = Blueprint('user', __name__, template_folder='user_templates') @user_bp.route('/profile') def profile(): return render_template('profile.html')
from flask import Blueprint, render_template admin_bp = Blueprint('admin', __name__, template_folder='admin_templates') @admin_bp.route('/dashboard') def dashboard(): return render_template('dashboard.html')
This example creates a blueprint named 'simple' with one route '/hello'. The blueprint is registered with the app under the URL prefix '/bp'. When you visit '/bp/hello', it shows a message from the blueprint.
from flask import Flask, Blueprint, render_template_string app = Flask(__name__) # Create a blueprint bp = Blueprint('simple', __name__, template_folder='templates') # Define a route in the blueprint @bp.route('/hello') def hello(): # Use a simple template string for demo return render_template_string('<h1>Hello from Blueprint!</h1>') # Register the blueprint with the app app.register_blueprint(bp, url_prefix='/bp') if __name__ == '__main__': app.run(debug=False)
Always register your blueprint with the main app using app.register_blueprint().
Use url_prefix to add a common path before all blueprint routes.
Blueprint templates can be stored in a separate folder to keep things tidy.
Blueprints group routes and templates to organize your Flask app.
Register blueprints with the main app to activate their routes.
Use url_prefix to avoid route conflicts and keep URLs clear.
Practice
Blueprint in a Flask application?Solution
Step 1: Understand Blueprint role
A Blueprint groups related routes and templates to keep code organized.Step 2: Compare other options
Connecting to databases, creating app instances, or handling authentication are separate tasks.Final Answer:
To organize routes and templates into reusable components -> Option BQuick Check:
Blueprint = organize routes/templates [OK]
- Thinking Blueprint creates the app instance
- Confusing Blueprint with database connection
- Assuming Blueprint handles authentication automatically
blog with a Flask app app using the URL prefix /blog?Solution
Step 1: Recall correct method signature
The method isregister_blueprint(blueprint, url_prefix='...').Step 2: Check options for correct syntax
Only app.register_blueprint(blog, url_prefix='/blog') uses the correct method and parameter names.Final Answer:
app.register_blueprint(blog, url_prefix='/blog') -> Option AQuick Check:
register_blueprint with url_prefix = app.register_blueprint(blog, url_prefix='/blog') [OK]
- Swapping parameter order
- Using wrong parameter name like prefix_url
- Calling prefix as a method on Blueprint
from flask import Blueprint, render_template
blog = Blueprint('blog', __name__, template_folder='templates')
@blog.route('/post')
def show_post():
return render_template('post.html')And this main app code:
from flask import Flask app = Flask(__name__) app.register_blueprint(blog, url_prefix='/blog')
What URL should you visit to see the
post.html template rendered?Solution
Step 1: Understand route and url_prefix
The Blueprint route is '/post', and the Blueprint is registered with prefix '/blog'.Step 2: Combine prefix and route
The full URL becomes '/blog/post' to access the route.Final Answer:
/blog/post -> Option CQuick Check:
url_prefix + route = /blog/post [OK]
- Ignoring url_prefix and using only route
- Swapping url_prefix and route order
- Assuming url_prefix is not added to route
from flask import Flask app = Flask(__name__) app.register_blueprint(blog, prefix='/blog')
Solution
Step 1: Check parameter name in register_blueprint
The correct parameter to set URL prefix isurl_prefix, notprefix.Step 2: Validate other options
Blueprints register after app creation; name can be anything; Flask supports blueprints.Final Answer:
The parameter should be url_prefix, not prefix -> Option DQuick Check:
Correct param is url_prefix [OK]
- Using prefix instead of url_prefix
- Trying to register Blueprint before app exists
- Thinking Blueprint name must be 'app'
admin and user, both with a route /dashboard. How can you register them in your Flask app to avoid URL conflicts and keep URLs clear?Solution
Step 1: Understand URL conflicts
Both Blueprints have the same route/dashboard, which causes conflicts if no prefix is used.Step 2: Use url_prefix to separate routes
Assigning differenturl_prefixvalues like/adminand/userkeeps URLs unique and organized.Final Answer:
Register each Blueprint with a different url_prefix, like /admin and /user -> Option AQuick Check:
Different url_prefix avoids route conflicts [OK]
- Not using url_prefix and causing route clashes
- Renaming routes manually instead of using prefixes
- Using same url_prefix for multiple Blueprints
Ready to prove it?
Pass the test and this pattern moves unknown
