2016-11-15 86 views
3

Jinja2的框架变量我有一个全局函数test在全局功能

from jinja2.utils import contextfunction 

@contextfunction 
def test(context): 
    context.get_all() 

而且在我的测试,我称它是这样的...

{% set i = 0 %} 
{% for j in range(0, 10) %} 
    {% set k = 0 %} 
    {{ test() }} 
{% endfor %} 

,在最终的唯一变量在test中的contextijk是“不可读的”。有什么办法来访问他们比他们突入test(j, k)

+0

你与模板背景下进口? (例如: {%from'admin/lib.html'import render_form,render_field,render_form_fields with context%}) – rll

+0

为了这个例子,没有导入。在编译的模板上调用'render'并将'test()'添加到'env ['globals']' – Shaun

+0

您必须将j,k传递给该函数。这些变量是for块的局部变量,不可用于全局上下文。 j是不言自明的; k是本地的,因为['{%set%}'没有分配给全局上下文](https://github.com/pallets/jinja/issues/164)。 – approxiblue

回答

2

根据github issue with a similar concern,已定义为jk的变量本地设置,而不是全局等。除非您将该函数传递给函数,否则您试图调用的函数将无法识别变量k。这是记录的行为。

相关计算器问题:

Can a Jinja variable's scope extend beyond in an inner block?

Jinja2: Change the value of a variable inside a loop

+1

这也是我的结论。很好有一个理智的检查。看起来很奇怪,你不能访问本地块。 – Shaun