2016-11-15 84 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