如何在Jinja 2模板中重构代码以进行渲染?

时间:2019-04-27 07:24:52

标签: python html python-3.x mongodb jinja2

我正在尝试在Web应用程序中显示mongo数据库中的值。我正在使用flask框架,在这里我调用函数,该函数将返回列表以html模板打印。我的代码如下所示

dic = mycol.find(myquery)

这将从mongodatabase查询内容字典对象 当我遍历这个对象时,我得到了字典集

for x in dic:

像x的每个值都包含

{'name':'john','age':'15','weight':'50'}
{'name':'ash','age':'18','weight':'60'}
{'name':'tim','age':'20','weight':'80'}

我用于呈现这些值的代码如下

person_name = []
person_age = []
person_weight = []
for x in dic:
    person_name.append(x["person_name"])
    person_age.append(x["person_age"]) 
    person_weight.append(x["person_weight"])

稍后我将返回这些列表以html打印 jinja 2的代码如下

{{person_name[loop.index0]}} {{person_age[loop.index0]}} {{person_weight[loop.index0]}}

我觉得这不是更好的方法。那么,在几行代码中还有其他更好的方法吗?感谢您阅读

1 个答案:

答案 0 :(得分:1)

如果您使用的是flask,则可以使用render_template()flask函数将列表或字典简单地传递到HTML模板。

就您而言,您可以简单地做(以此为例)。请注意,在编写dictionary=dic的地方,第一个dictionary可以是任何名称/变量,然后您将使用Jinja2语法进行引用。

@app.route('/')
def index():
    # Code to get dictionary from db, assigned to dic like yours
    return render_template('[name of template].html', dictionary=dic)

然后在模板中,您可以使用Jinja2语法进行for循环,以在dic字典/列表中列出。

// Somewhere inside HTML template
{% for x in dictionary %}
    <p>{{ x.name }}</p>
    <p>{{ x.age }}</p>
    <p>{{ x.weight }}</p>
{% endfor %}