Skip to content
Related Articles

Related Articles

Improve Article

Generating dynamic URLs in Flask

  • Last Updated : 15 Oct, 2021

Prerequisites: Basics of Flask

When creating an application, it’s quite cumbersome to hard-code each URL. A better way to resolve this problem is through building Dynamic URLs.  Let us briefly understand the meaning of a few common terms first.

 Attention geek! Strengthen your foundations with the Python Programming Foundation Course and learn the basics.  

To begin with, your interview preparations Enhance your Data Structures concepts with the Python DS Course. And to begin with your Machine Learning Journey, join the Machine Learning - Basic Level Course

  • Dynamic Routing: It is the process of getting dynamic data(variable names) in the URL and then using it.
  • Variable Rules: Variable sections can be added to a URL by marking sections with <variable_name>.

Let us first create a basic flask application:



Python3




#importing the flask Module
from flask import Flask
 
# Flask constructor takes the name of
# current module (__name__) as argument
app = Flask(__name__)
 
@app.route('/')
# ‘/’ URL is bound with hello_world() function.
def home():
    return 'You are at home page.'
 
@app.route('/allow')
def allow():
    return 'You have been allowed to enter.'
 
@app.route('/disallow')
def disallow():
    return 'You have not been allowed to enter.'
 
# main driver function
if __name__ == '__main__':
    # run() method of Flask class runs the application
    # on the local development server.
    app.run()

Output:

Now consider a situation where you have many users and you want to route the user to a specific page with his or her name or ID in the URL as well as the template. If you try to do this manually then you have to manually type the complete URL for every user. Doing this can be very tedious and next to impossible. However, this can be solved using the flask with something called dynamic routing

Dynamic Routing

We shall now look at a better approach using Variable Rules. We will add a <variable name> with each route. Optionally, we can also define the converter with each variable name <converter: variable name>. By default, the converter is String.

Example:

@app.route('allow/<variable name>')

OR

@app.route('allow/<converter: variable name>')

Some converters are:

String(default) accepts any text without a slash
intaccepts positive integers
floataccepts positive floating point values
pathlike string but also accepts slashes
uuidaccepts UUID strings

Let’s allow the user with having an ID of less than 25 to visit the page. The modified code with dynamic URL binding is given below. The function uses the <variable name> passed in route() decorator as an argument.  

@app.route('/allow/<int:Number>')
def allow(Number):
    if Number < 25:
        return f'You have been allowed to enter because\
         your number is {str(Number)}'
    else:
       return f'You are not allowed'

Python3




#importing the flask Module
from flask import Flask
 
# Flask constructor takes the name of
# current module (__name__) as argument
app = Flask(__name__)
 
@app.route('/')
# ‘/’ URL is bound with hello_world() function.
def home():
    return 'You are at home page.'
 
# Use of <converter: variable name> in the
# route() decorator.
@app.route('/allow/<int:Number>')
def allow(Number):
    if Number < 25:
        return f'You have been allowed to enter because your number is {str(Number)}'
    else:
       return f'You are not allowed'
 
# main driver function
if __name__ == '__main__':
    # run() method of Flask class runs the application
    # on the local development server.
    app.run()

Output:




My Personal Notes arrow_drop_up