Jinja2动态变量建筑

时间:2014-11-18 21:47:37

标签: python jinja2

我的jinja模板获取了一个具有许多变量名称的对象,这些属性因其名称而异,我正在寻找一种基于前缀和for循环访问此属性的方法:

{% for i in Object.vars %}
    <h1> {{ Object.attribute_ + i }} </h1>
{% endfor %}

我正在尝试访问Object.attribute_1,Object.attribute_2等。上面的代码当然不会起作用,但我想不出这样做的方法。

2 个答案:

答案 0 :(得分:4)

请记住,在模板文件中执行过多逻辑会导致(长期)问题以维护代码。

我想说,在使用getattr()函数渲染模板之前,将逻辑保留在模板之外并创建对象列表:

for i in Object.vars:
    list_of_objects.append(getattr(Object, 'attribute_' + i))

现在,当渲染模板时,将列表传递给那样:

render_template('page.html', list_of_objects=list_of_objects)

答案 1 :(得分:1)

解决这类问题的规范方法是传递诸如列表或字典之类的结构。动态变量名称几乎总是一个糟糕的主意。