How to Use Context Processor in Flask: Simple Guide
In Flask, use a
context_processor function to inject variables or functions into all templates automatically. Define a function decorated with @app.context_processor that returns a dictionary of values accessible in your templates.Syntax
A context processor in Flask is a function decorated with @app.context_processor. This function must return a dictionary where keys are variable names and values are the data you want available in all templates.
Example parts:
@app.context_processor: Decorator to register the function as a context processor.- Function returning a dictionary: The keys become template variables.
python
from flask import Flask app = Flask(__name__) @app.context_processor def inject_user(): return {'user': 'Alice'}
Example
This example shows how to use a context processor to make a user variable available in all templates without passing it explicitly in each route.
python
from flask import Flask, render_template_string app = Flask(__name__) @app.context_processor def inject_user(): return {'user': 'Alice'} @app.route('/') def home(): return render_template_string('<h1>Welcome, {{ user }}!</h1>') if __name__ == '__main__': app.run(debug=True)
Output
When you visit http://localhost:5000/, the page shows: Welcome, Alice!
Common Pitfalls
Common mistakes when using context processors include:
- Not returning a dictionary from the function.
- Using context processors for heavy or slow operations, which can slow down every template render.
- Overusing context processors for variables only needed in some templates instead of passing them directly.
Always keep context processors lightweight and only for truly global data.
python
from flask import Flask app = Flask(__name__) # Wrong: returning a list instead of dict @app.context_processor def wrong_processor(): return ['user', 'Alice'] # This will cause an error # Correct: @app.context_processor def correct_processor(): return {'user': 'Alice'}
Quick Reference
- Decorator:
@app.context_processor - Return: Dictionary of variables/functions
- Use: Inject global template variables
- Keep it light: Avoid slow or complex logic
Key Takeaways
Use @app.context_processor to inject variables globally into templates.
Return a dictionary from the context processor function with keys as template variable names.
Keep context processors lightweight to avoid slowing down template rendering.
Avoid using context processors for data only needed in specific templates.
Context processors help reduce repetitive code by sharing common data across templates.