如何在Jinja2临时程序中获取参数列表

2024-10-01 17:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

如何获取传递给Jinja2模板的所有参数的列表?在

如果我有一个非常通用的模板,并且我想列出传递的所有参数(出于调试原因),有没有办法做到这一点?在

比如:

mytemplate.html

{% for argument in LIST_OF_ARGUMENT %}
    {{ argument }}<br>
{% endfor %}

所以在视图/foobar

如果我以这种方式调用模板:

^{pr2}$

我明白了

the_content_of_form <br>
bar <br>

如果我以这种方式调用模板:

return render_template('mytemplate.html', lorem=ipsum, fooooo='barrrrr')

我明白了

the_content_of_lorem <br>
barrrrr <br>

Tags: ofthebr模板jinja2列表参数html
2条回答

您只需要将它们作为参数传递给render_template,这可能是最常见的用法,包括将字典列表作为参数传递给render template:

def Viewfunction():
     #do something, get something from db as result and then
     arguments = [dict(name=row[0],age=row[1]) for row in result.fetchall()]

     return render_template('mytemplate.html', form=myform, arguments=arguments)

然后像这样访问它们:

^{pr2}$

显然,您还可以将所有其他列表传递给模板,而不仅仅是字典列表,您可以用非常类似的方式遍历它们。在

至于调试,我发现Flask内置的调试工具非常有用,如果你得到了一个可以执行代码的页面,如果你对你所有的变量感兴趣,你只需在stacktrace的一个框架中输入locals()。您只需要启用调试模式就可以使用它,只需记住在生产中关闭它。在

下面是一个工作示例,它取自flaskr示例应用程序中的flaskr示例应用程序,当您下载到examples文件夹下时:

@app.route('/')
def show_entries():
    db = get_db()
    cur = db.execute('select title, text from entries order by id desc')
    entries = cur.fetchall()
    return render_template('show_entries.html', entries=entries,local=locals())

当您这样做时:

{% for item in local %}
{{ item }}
{% endfor %}

你会得到db cur条目,这是你想要的吗?在

看看jinja2.runtime.Context

“模板上下文保存模板的变量。它存储传递给模板的值以及模板导出的名称“

“模板上下文支持只读dict操作(get、keys、values、items、iterkeys、itervalues、iteritems、getitem包含)。此外,还有一个resolve()方法,它不会因KeyError而失败,但会为缺少的变量返回未定义的对象。”

相关问题 更多 >

    热门问题