How to do it...

To write a custom context processor, follow the required steps.

Let's first display the descriptive name of the product in the format Category / Product-name. Afterwards, add the method to my_app/product/views.py, as follows:

@product_blueprint.context_processor
def product_name_processor(): def full_name(product): return '{0} / {1}'.format(product['category'],
product['name']) return {'full_name': full_name}

A context is simply a dictionary that can be modified to add or remove values. Any method decorated with @product_blueprint.context_processor should return a dictionary that updates the actual context. We can use the preceding context processor as follows:

{{ full_name(product) }} 

We can add the preceding code to our app for the product listing (in the flask_app/my_app/templates/product.html file) in the following manner:

{% extends 'home.html' %} 
 
{% block container %} 
  <div class="top-pad"> 
    <h4>{{ full_name(product) }}</h4> 
    <h1>{{ product['name'] }} 
      <small>{{ product['category'] }}</small> 
    </h1> 
    <h3>$ {{ product['price'] }}</h3> 
  </div> 
{% endblock %} 

The resulting parsed HTML page should look like the following screenshot:

Have a look at the Implementing  block composition and layout inheritance recipe to understand the context of this recipe.