Python Jinja无法调用函数

Python Jinja无法调用函数,python,function,syntax,macros,jinja2,Python,Function,Syntax,Macros,Jinja2,我试图在jinja中创建一个简单的宏,然后用{{messageRed('TEST')}}调用它,但不管我做什么,它都不起作用。它也不会将计数器增加到+1。最后,我只得到了输出: 合规性得分:0 预期输出:符合性分数:1测试 代码如下: {%set counter = 0 %} {%set msgRed = ''%} {%macro messageRed(msg) -%} {%set counter = counter + 1%} {%set msgRed = msgRed

我试图在jinja中创建一个简单的宏,然后用
{{messageRed('TEST')}}
调用它,但不管我做什么,它都不起作用。它也不会将计数器增加到+1。最后,我只得到了输出:

合规性得分:0
预期输出:符合性分数:1测试
代码如下:

{%set counter = 0 %}

{%set msgRed = ''%}

{%macro messageRed(msg) -%}
    {%set counter = counter + 1%}
    {%set msgRed = msgRed + '<p style="color: red;">' + msg + '</p>'%}
{%- endmacro%}

{{messageRed('TEST')}}

<h3>Compliance Score: <b> {{counter}} </b></h3><hr>{{msgRed}}
{%set counter=0%}
{%set msgRed='''%}
{%macro messageRed(msg)-%}
{%set counter=计数器+1%}
{%set msgRed=msgRed+'

'+msg+'

'%} {%-endmacro%} {{messageRed('TEST')} 合规性得分:{{counter}
{{msgRed}
基于互联网上的信息
无法更改外部元素-这是正常的行为-查找
范围

所以它不仅不能改变外部值,而且如果你运行它几次,你总是会得到相同的值。可能就像在普通函数中一样,每次运行宏时,它都会一次又一次地创建这个(局部)变量

在回答这个问题时,有人建议将其定义为

{% set count = namespace(value=0) %} 
和改变价值

{% set count.value = count.value + 1 %}
并展示它

{{ count.value }}
这对我很有用

msgRed
也是如此

{%set msgRed = namespace(text="") %}

{%set msgRed.text = msgRed.text + '<p style="color: red;">' + msg + '</p>'%}

{{ msgRed.text }}
{%set msgRed=namespace(text=”“)%}
{%set msgRed.text=msgRed.text+'

'+msg+'

'%} {{msgRed.text}

这里是我用来测试它的最小工作代码: 从jinja2导入模板

tm=Template(“”)
{%set counter=namespace(value=0)%}
{%set msgRed=namespace(text=”“)%}
{%macro messageRed(msg)-%}
{%set counter.value=counter.value+1%}
{%set msgRed.text=msgRed.text+'

'+msg+'

'%} {%-endmacro%} {{messageRed('TEST')} 合规性得分:{counter.value}
{{msgRed.text} {{messageRed('TEST')} 合规性得分:{counter.value}
{{msgRed.text} {{messageRed('TEST')} 合规性得分:{counter.value}
{{msgRed.text} """) msg=tm.render() 打印(msg)
结果

<h3>Compliance Score: <b> 1 </b></h3><hr><p style="color: red;">TEST</p>
    
<h3>Compliance Score: <b> 2 </b></h3><hr><p style="color: red;">TEST</p><p style="color: red;">TEST</p>
    
<h3>Compliance Score: <b> 3 </b></h3><hr><p style="color: red;">TEST</p><p style="color: red;">TEST</p><p style="color: red;">TEST</p>
合规性得分:1测试

合规性得分:2测试

合规性得分:3测试


始终将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,也不是指向外部门户的链接)进行讨论(不是评论)。还有其他有用的信息。你运行过两次吗?您是否进行了
2测试
?I only guest:它可以使用本地变量
计数器
内部
messageRed
,并且从不使用外部
计数器
。当您运行它时,它可能总是
0
,所以如果您多次运行它,您应该总是根据internet上的信息获取文本
1测试
,这可能是正常(和)行为-
scope
-宏无法访问外部变量。在回答问题时,有人建议使用
{%set count=namespace(value=0)%}
和更高版本的
{%set count.value=count.value+1%}