# Flask: Create a Route With Optional URL Parameters

> Create a Flask route with optional URL parameters using multiple app.route decorators with a defaults dictionary for each optional parameter

**URL:** https://sentry.io/answers/create-a-route-with-optional-url-parameters-in-flask/

---

## The Problem

How do I write a Flask route with optional URL parameters?

## The Solution

To create a Flask route with an optional URL parameter, we can use two [`route`](https://flask.palletsprojects.com/en/2.2.x/api/#flask.Flask.route) decorators on the same function. One will describe the URL without the optional parameter, and the other will describe the URL with the optional parameter.

```python
@app.route('/products', defaults={'product_id': None})
@app.route('/products/<product_id>')
def show_product(product_id):
    if product_id:
      # code to show individual product
    else:
      # code to show whole catalog
```

This same method will work for multiple optional URL parameters.

```python
@app.route('/products', defaults={'product_id': None, 'store_id': None})
@app.route('/products/<product_id>', defaults={'store_id': None})
@app.route('/products/<product_id>/<store_id>')
def show_product(product_id, store_id):
    if product_id:
      if store_id:
        # code to show individual product at specific store
      else:
        # code to show individual product everywhere
    else:
      # code to show whole catalog
```

Note that it would be impossible to extend the above function to accept a `store_id` without a `product_id`, as the positional nature of the arguments would create an ambiguity about which ID was being specified.

---

*Source: [sentry.io/answers/create-a-route-with-optional-url-parameters-in-flask/](https://sentry.io/answers/create-a-route-with-optional-url-parameters-in-flask/)*
