Python Jinja无法调用函数
我试图在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
{{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%}