Bootstrap

Python中Jinjia2模板使用说明

一、安装

pip install Jinja2

二、常用基础语法

1、替换

使用{{ variable }},相当于拼接字符串。

#define CAN_ADAPTER_MESSAGE_ID_{{ msg_name }}

2、注释

使用{# ... #}

{# This is a comment #}

3、条件控制

jinjia2支持if、for、while等条件语句。

{% if signal.name == sig_name %}
{{ group_name }}_IDT pdata = {0};
{% else %}
{{ group_name }}_IDT pdata = {1};
{% endif %}
{% for group_name in swc_signal_groups %}
{{ group_name }}_IDT pdata = {0};
{% endfor %}

4、过滤器

过滤器使用管道符号(|)与变量衔接,格式例如{{ name|length }},获取变量name的长度,以下列出jinjia2中常用过滤器。

过滤器描述
length返回变量长度
lower将字符串转换为小写
upper将字符串转换为大写
capitalize将字符串转为首字母大写
striing将变量准换成字符串
int将值转换成 int 类型
float将值转换成 float类型
abs返回一个数值的绝对值

三、技巧

1、语句中加(-)生成文件中缩减本行语句占行

{%- for group_name in swc_signal_groups %}
{{ group_name }}_IDT pdata = {0};
{%- endfor %}

生成文本为:

FUSA_GROUP_48A_IDT pdata = {0};
SignalGroup_BMS_1_0x0014_IDT pdata = {0};
FUSA_GROUP_4B4_IDT pdata = {0};

2、全局变量使用

传统实现方法

{%- set is_signal_found = false %}
{%- for group_name in swc_signal_groups %}
{%- if group_name == sig_name %}
{%- set is_signal_found = true %}
{{ group_name }}_IDT pdata = {0};
{%- endif %}
{%- endfor %}
{%- if is_signal_found == false %}
return E_NOT_OK;
{%- endif %}

会发现定义的全局变量在循环中无法修改值,所以:
引入“空间”对象方法解决

{%- set is_signal_found = namespace(st=false) %}
{%- for group_name in swc_signal_groups %}
{%- if group_name == sig_name %}
{%- set is_signal_found.st = true %}
{{ group_name }}_IDT pdata = {0};
{%- endif %}
{%- endfor %}
{%- if is_signal_found.st == false %}
return E_NOT_OK;
{%- endif %}

;