官术网_书友最值得收藏!

  • Flask Framework Cookbook
  • Shalabh Aggarwal
  • 256字
  • 2021-08-05 17:17:22

Creating a custom context processor

Sometimes, we might want to calculate or process a value directly in the templates. Jinja2 maintains a notion that the processing of logic should be handled in views and not in templates, and thus, it keeps the templates clean. A context processor becomes a handy tool in this case. We can pass our values to a method; this will then be processed in a Python method, and our resultant value will be returned. Therefore, we are essentially just adding a function to the template context (thanks to Python for allowing us to pass around functions just like any other object).

How to do it…

Let's say we want to show the descriptive name of the product in the format Category / Product-name:

@product_blueprint.context_processor:
def some_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 this 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 will look like the following screenshot:

See also

  • Have a look at the Block composition and layout inheritance recipe to understand the context of this recipe
主站蜘蛛池模板: 普宁市| 陆川县| 河池市| 鹿邑县| 宜宾市| 郸城县| 高雄县| 绵阳市| 呼和浩特市| 吐鲁番市| 普定县| 乌兰察布市| 司法| 德州市| 寿阳县| 鹤壁市| 邮箱| 巴彦县| 庆阳市| 霸州市| 武城县| 安远县| 兴山县| 托克托县| 涟水县| 永定县| 兴宁市| 西平县| 璧山县| 周至县| 祥云县| 南木林县| 尖扎县| 六枝特区| 梧州市| 亳州市| 共和县| 阳山县| 夹江县| 屏南县| 布尔津县|