我想知道在文件中添加包含或宏时是否有任何方法可以使用jinja缩进缩进.我想使用jinja生成代码文件.一个例子是
文件:class.html
class MyClass:
def someOp():
pass
{% include "someOp.html" %}
Run Code Online (Sandbox Code Playgroud)
文件:someOp.html
def someOp2():
pass
Run Code Online (Sandbox Code Playgroud)
模板的结果应该是:
class MyClass:
def someOp():
pass
def someOp2():
pass
Run Code Online (Sandbox Code Playgroud)
如果有任何方法让jinja在包含文件中每行的include标记之前添加缩进?或者有没有办法自定义jinja来做到这一点?
小智 20
一种方法是将包裹包括在一个宏,则由于宏是一个函数,它的输出可以通过缩进过滤器:
class MyClass:
def someOp():
pass
{% macro someop() %}{% include "someOp.html" %}{% endmacro %}
{{ someop()|indent }}
Run Code Online (Sandbox Code Playgroud)
默认情况下,'indent'缩进4个空格并且不缩进第一行,您可以使用例如'indent(8)'进一步缩进,请参阅http://jinja.pocoo.org/docs/templates/#list-of-内置过滤器以获取更多详细信息.
如果您要包含的内容被定义为开始的宏,则不需要进一步的包装器宏,您可以直接跳转到使用缩进过滤器.
小智 8
我正在寻找 Jinja2 以实现相同的目标,并得出结论,目前无法将多行块缩进与原始 Jinja 语句对齐。
我已经向 Jinja 发布了一个小的 PR 来添加一个新的语法{%* ... %},{{* ... }}它就是这样做的。详情请参阅 PR:
https://github.com/pallets/jinja/pull/919