Bootstrap FreeKB - Flask - Redirect a user to an HTML page using render_template
Flask - Redirect a user to an HTML page using render_template

Updated:   |  Flask articles

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

 

At a high level, there are two Flask functions that can be used to redirect a user to an HTML page.

  • render_template (this article)
  • 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 Buy Me A Coffee



Comments


Add a Comment


Please enter 8c46c0 in the box below so that we can be sure you are a human.