jinja变量可以作为参数传递给for循环吗?

0 投票
1 回答
1465 浏览
提问于 2025-04-18 17:29

我定义了一个字符串类型的参数。

% set my_argument = 'list_from_gae' %}

我想在一个for循环中把这个参数当作输入:

{% for i in my_argument %}

do sth

{% endfor %}

my_argument这个字符串对应的是从一个Python应用程序传来的一个列表。上面的代码不管用,但如果我在for循环中把my_argument换成字符串字面量,就能正常工作。

{% for i in list_from_gae %}

do sth

{% endfor %}

怎么才能让jinja明白my_argument是一个变量,而不是一个字符串字面量呢?

1 个回答

1

你不能这样做,除非你额外花点功夫把上下文变成一个字典。可以看看这个链接:如何从Jinja 2模板中获取当前变量的列表? 一旦你有了这个上下文,就可以用 context()[my_argument] 来访问。

更好的做法是把 list_from_gae 放在一个传给模板的 字典 里;这样你就可以用这个字典来访问那个名字。

比如,如果你现在传入的是:

template_values = {'list_from_gae': list_from_gae}

那么可以改成传入:

template_values = {'lists': {'list_from_gae': list_from_gae}}

然后用以下方式来访问:

{% for i in lists[my_argument] %}

撰写回答