在Django的模板系统中,什么是相当于Jinja的宏?

时间:2012-03-19 13:54:47

标签: django django-templates jinja2

我们只是说我需要在页面中反复渲染一定数量的HTML,例如,用户的个人资料信息。 Jinja的宏似乎非常适合这种用法。但是,Django没有宏。

现在,我正在使用自定义过滤器用于同一目的 - 这是最好的方法,还是我错过了什么?

感谢。


PS。我正在使用webapp2&迁移在GAE上运行的应用程序。 Jinja到Django。

4 个答案:

答案 0 :(得分:7)

在对文档进行了一些修改之后,我终于找到了"correct" way to do this: custom inclusion tags,它允许您从模板中创建标记。

答案 1 :(得分:2)

您可以采取另外两种方法:blocksincludes。使用块,您必须将其一直包含在继承链中。使用includes,您只需根据需要加载,但必须确保从视图中传递适当的上下文变量。但是,就DRY而言,您当前的方法可能是最有用的。

答案 2 :(得分:1)

Django没有宏,所以它既可以是自定义过滤器,也可以在自己的模板中分离重复的代码,并且可以通过“with”传递不同的参数来反复包含它,这可能比宏更慢。但你实际上可以使用django完美的jinja2模板系统。

答案 3 :(得分:0)

仅仅为了记录,我实际上花了相当多的时间来调整预先存在的片段以相当强大的方式在django中执行宏,如果你真的想要宏请check it out

作为建议,大多数时候你想用宏做什么,你应该真的使用include标签,如上所述;然而,有时候你真的想要一个宏,为此你必须使用像我这样的模板标签库(这是为django做的这一点之一)。