如何使生成的HTML在whitespce方面更干净?Django Templateing似乎对此非常草率。例如,它识别的标签,如IF或FORs,会被解析,然后用空行替换。另一个例子是,当我包含一个包含N个HTML代码链接的文件时。如果include语句是选项卡式的,则包含文件中的第一个链接将按属性缩进,其余链接将向左拉。
等等。
{% spaceless %}
似乎什么都没做。
是否有关于如何处理空白的设置?还是另一种解决方案?
谢谢。
我在寻找同一个问题的答案时发现了这一点,使用Django语法似乎没有一个干净明了的方法(我已经找到了,但我可能忽略了一些东西),因此我推荐Jinja2。我有使用它与SaltStack去除空白的经验。一种方法是将{% this %}
更改为{% this -%}
,这样就不会附加换行符,所以如果您有一行只包含{% this -%}
,那么它就不会在生成的html中显示为任何内容。
您可以像我所做的那样覆盖NodeList的渲染方法。查看我的问题与工作代码(仅适用于块和包括标签):
Django模板中的正确缩进(没有monkey补丁)?
Django的问题跟踪器中有一个关于更好地处理空白的问题。它在2014年被关闭为wontfix,并发表了以下评论:
据我所知,核心团队的共识是:
- Django模板语言对于生成HTML来说已经足够好了,HTML对空白不敏感
- 长期计划是用更好的发动机(很可能是Jinja)取代它,而不是继续使用它
- 如果你有更专业的需求(想要生成RTF?),只需使用另一个模板引擎,有几个可以选择
对于HTML输出,我个人可以处理混乱的空白。如果响应被压缩,它对HTTP响应大小的影响将很小。
我不得不处理一些精确的空白和换行符控制很重要的情况(例如,我有一个Telegram消息的模板,每条换行符都将是最终消息中的换行符)。为了整理模板,我最终编写了两个自定义标记:{% linemode %}
和{% line %}
。
示例模板:
{% linemode %}
{% line %}Line one.{% endline %}
This content will be ignored.
{% if True %}
{% line %}Line two.{% endline %}
{% endif %}
{% endlinemode %}
结果:
Line one.
Line two.
这里的想法是,{% linemode %}
块将丢弃未封装在{% line %}
标签中的所有内容。这样,{% if ... %}
和其他位就不会添加不需要的空格或换行符。来源于此。