如何将选定的命名参数传递给 Jinja2 的包含上下文?
Posted
技术标签:
【中文标题】如何将选定的命名参数传递给 Jinja2 的包含上下文?【英文标题】:How to pass selected, named arguments to Jinja2's include context? 【发布时间】:2012-03-13 09:10:57 【问题描述】:使用 Django 模板引擎,我可以在使用命名参数设置自定义上下文时包含另一个部分模板,如下所示:
% include "list.html" with articles=articles_list1 only %
% include "list.html" with articles=articles_list2 only %
您可能会认为,articles_list1
和 articles_list2
是两个不同的列表,但我可以重复使用相同的 list.html
模板,该模板将使用 articles
变量。
我正在尝试使用 Jinja2 实现相同的目标,但我看不到推荐的方法是什么,因为不支持 with
关键字。
【问题讨论】:
【参考方案1】:Jinja2 具有启用 with
关键字的 an extension - 它不会为您提供与 Django 相同的语法,并且它可能无法按您预期的方式工作,但您可以这样做:
% with articles=articles_list1 %
% include "list.html" %
% endwith %
% with articles=articles_list2 %
% include "list.html" %
% endwith %
但是,如果 list.html
基本上只是用作创建列表的一种方式,那么您可能希望将其更改为 macro
- 这将为您提供更大的灵活性。
% macro build_list(articles) %
<ul>
% for art in articles %
<li>art</li>
% endfor %
</ul>
% endmacro %
# And you call it thusly #
build_list(articles_list1)
build_list(articles_list2)
要从另一个模板中使用此宏,请将其导入:
% from "build_list_macro_def.html" import build_list %
【讨论】:
最后的链接指向答案本身! 根据文档,它现在包含在 2.9 中,不再需要作为扩展加载【参考方案2】:这样您可以将 多个变量 传递给 Jinja2 Include 语句 - (通过在 With 语句中用逗号分割变量):
% with var_1=123, var_2="value 2", var_3=500 %
% include "your_template.html" %
% endwith %
【讨论】:
【参考方案3】:对于 2017 年以上的读者,Jinja 自 2.9
起默认包含 with
语句。无需扩展。
http://jinja.pocoo.org/docs/2.9/templates/#with-statement
在旧版本的 Jinja(2.9 之前)中,需要通过扩展启用此功能。现在默认启用。
【讨论】:
好吧,我发现自己在 2017 年,但它不起作用。麻烦提供链接? @Pithikos jinja.pocoo.org/docs/2.9/templates/#with-statement “在旧版本的 Jinja(2.9 之前)中,需要通过扩展启用此功能。现在默认启用。”以上是关于如何将选定的命名参数传递给 Jinja2 的包含上下文?的主要内容,如果未能解决你的问题,请参考以下文章