Flask uses the MVC (Model View Controller) Framework. Just to make this as obvious as possible, I like my Flask apps to have the following.
- Model -> models.py
- View -> views.py
- Controller -> __init__.py
For example, let say you have the following.
├── main.py
├── my-project (directory)
│ ├── __init__.py
│ ├── views.py
│ ├── templates (directory)
│ │ ├── base.html
│ │ ├── home.html
│ │ ├── foo.html
│ │ ├── bar.html
redirect can be used to redirect a user.
- Redirect to a URL (such as http://www.example.com)
- Redirect to an HTML page using render_template (this article)
- Redirect to a Route using url_for
Here is an example of how you could use render_template in a Blueprint Route to redirect a user to a certain HTML page.
from flask import Blueprint, render_template
views = Blueprint('views', __name__)
@views.route('/')
def home():
return render_template('home.html')
@views.route('/foo')
def foo():
return render_template('foo.html')
@views.route('/bar')
def bar():
return render_template('bar.html')
Let's say you want to redirect a user to an HTML page with parameters. For example, to redirect a user to foo.html?token=xyz.
from flask import Blueprint, render_template
views = Blueprint('views', __name__)
@views.route('/foo')
def foo():
return render_template('foo.html?token=xyz')
If you try to do this with render_template, an TemplateNotFound exception will be raised, something like this.
jinja2.exceptions.TemplateNotFound: foo.html?token=xyz
Here is how you can redirect a user to an HTML page with parameters using url_for and render_template. In this example, when the user requests the /foo endpoint they will be redirected to /bar?greeting='hello'
from flask import Blueprint, render_template, redirect, url_for
views = Blueprint('views', __name__)
@views.route('/foo')
def home():
return redirect(url_for('views.bar', greeting='hello'))
@views.route('/bar')
def bar():
return render_template('bar.html')
Did you find this article helpful?
If so, consider buying me a coffee over at