Skip to main content
 首页 » 编程设计

python之如何确保 Jinja 自定义标签只输出一次

2025年05月04日11yyy_WW

我在 Jinja2 中有一个自定义标签,我只想在第一次调用它时输出一些内容。所以说我有以下模板:

1. {% only_once %} 
2. {% only_once %} 
3. {% only_once %} 

我希望输出为:

1. "I only get printed once!" 
2. 
3. 

我猜最好的方法是在模板的上下文中设置一个标志来跟踪我是否已经打印了一些东西。这是一个代码示例,但这是正确的吗?

class OnlyOnceExtension(Extension): 
    tags = set(['only_once']) 
 
    @contextfunction 
    def parse(self, context, parser): 
        if hasattr(context, 'my_flag') and context.my_flag: 
            return Output("") 
        else: 
            return Output("I only get printed once!") 

这样对吗?我读了一些关于上下文是不可变的东西,所以这行不通吗? (参见 http://jinja.pocoo.org/2/documentation/api 并搜索不可变)

请您参考如下方法:

如果你想纯粹用 Jinja 来做,你可以用那种方式检查 loop.index 变量,

{% for bar in bars %} 
    {% if loop.index == 1 %} 
        Print me once 
    {% endif %} 
    Print me every time 
{% endfor %}