Django模板生成混乱的空白HTML



如何使生成的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 ... %}和其他位就不会添加不需要的空格或换行符。来源于此。