templates - Jinja 在包含或宏上保留缩进

标签 templates jinja2

我想知道在文件中添加包含或宏时是否有任何方法可以保持 jinja 的缩进。我想使用 jinja 生成代码文件。一个例子是

文件:class.html

class MyClass:
     def someOp():
         pass

     {% include "someOp.html" %}

文件:someOp.html

def someOp2():
    pass

模板的结果应该是:

class MyClass:
     def someOp():
         pass

     def someOp2():
         pass

是否有任何方法可以让 jinja 在包含文件中的每一行的包含标记之前添加缩进?或者有什么方法可以自定义 jinja 来做到这一点?

最佳答案

一种方法是将 include 包装在宏中,然后因为宏是一个函数,所以它的输出可以通过缩进过滤器传递:

class MyClass:
    def someOp():
        pass

    {% macro someop() %}{% include "someOp.html" %}{% endmacro %}
    {{ someop()|indent }}

默认情况下“缩进”缩进 4 个空格并且不缩进第一行,您可以使用例如'indent(8)' 进一步缩进,参见 http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters了解更多详情。

如果您所包含的内容首先被定义为宏,则不需要进一步的包装器宏,您可以直接跳到使用缩进过滤器。

关于templates - Jinja 在包含或宏上保留缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821539/

相关文章:

c++ - virtual对类模板成员使用的影响

c++ - 带有模板参数的函数指针

c++ - 初始化模板类的静态模板化成员

jinja2 - 如何处理 Pelican 模板中的变量?

python - 如何在 jinja 2 - Flask 中访问 session 变量

java - 对 Java 电子邮件模板的建议?

C++ 模板类循环依赖

python - 有条件地应用 jinja2 过滤器

regex - Ansible:从 IP 地址中提取前三个八位字节

python - 循环 Jinja2 模板中的列表