如何使用Python中的Jinja2模块生成特定的表格?

xiozqbni  于 2023-02-26  发布在  Python
关注(0)|答案(1)|浏览(233)

我正在尝试用jinja2生成一个C代码,并且有一个特定的重复结构。它应该类似于这样:

static t_param const paramRec_time_failure_retry =
{
                                    2605, /* Parameter ID */
              &Params.TIME_FAILURE_RETRY, /* Pointer to parameter value(s) */
                                       4, /* Size in bytes */
                                  0x01E1, /* Security and storage flags */
                                    NULL  /* Application function pointer */
};

所以我想要的是我的代码行都在每一行注解开始之前的末尾对齐。
下面是我的模板:

static t_param const paramRec_{{ PARAM_NAME | lowercase }} =
{
                                    {{ PARAM_ID }}, /* Parameter ID */
                     &Params.{{ PARAM_NAME }}, /* Pointer to parameter value(s) */
                                      {{ size }}, /* Size in bytes */
                                  {{ ssf }}, /* Security and storage flags */
                                    {% if APPLY_FUNCTION == 'Y'%}&PssApply{{param.PARAM_NAME}}{% else %}NULL{% endif %} /* Application function pointer */
};
rryofs0p

rryofs0p1#

您可以使用format过滤器来填充字符串。

  • 注意:* 这里我还使用了withspace控制结构,以便将注解封装到另一行,以防止Jinja代码跨越太多列
static t_param const paramRec_{{ PARAM_NAME | lower }} =
{
{{ '%40s' | format(PARAM_ID) -}}
, /* Parameter ID */
{{ '%40s' | format('&Params.' ~ PARAM_NAME) -}}
, /* Pointer to parameter value(s) */
{{ '%40s' | format(size) -}}
, /* Size in bytes */
{{ '%40s' | format(ssf) -}}
, /* Security and storage flags */
{{ '%40s' | format(
     '&PssApply' ~ param.PARAM_NAME if APPLY_FUNCTION == 'Y' else 'NULL'
) -}}
, /* Application function pointer */
};

这将产生:

static t_param const paramRec_time_failure_retry = 
{ 
                                    2605, /* Parameter ID */ 
              &Params.TIME_FAILURE_RETRY, /* Pointer to parameter value(s) */ 
                                       4, /* Size in bytes */ 
                                     481, /* Security and storage flags */ 
                                    NULL, /* Application function pointer */ 
};

相关问题