一、安装
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 %}