Django 模板生成凌乱的空白 HTML

Posted

技术标签:

【中文标题】Django 模板生成凌乱的空白 HTML【英文标题】:Django Templates generate messy whitespace HTML 【发布时间】:2013-07-28 00:15:19 【问题描述】:

如何使生成的 html 在 whitespce 方面更清晰? Django Templating 似乎对此很草率。 例如,它识别的标签,如 IF 或 FOR 被解析然后替换为空行。 另一个例子是当我包含一个包含 N 个 HTML 代码链接的文件时。如果 include 语句是制表符,则被包含文件中的第一个链接适当地缩进,其余的被拉到左边。

等等。

% spaceless % 似乎什么也没做。

是否有关于如何处理空白的设置? 还是其他解决方案?

谢谢。

【问题讨论】:

【参考方案1】:

您可以像我所做的那样覆盖 NodeList 的渲染方法。用工作代码查看我的问题(仅适用于块和包含标签):

Proper indentation in Django templates (without monkey-patching)?

【讨论】:

谢谢,这是一个解决方案。不过应该会容易得多。【参考方案2】:

我在寻找同一个问题的答案时发现了这一点,似乎没有一种干净清晰的方法可以使用 Django 语法(我已经找到但我可能忽略了一些东西)来做到这一点,等等注意我推荐Jinja2。我有使用 SaltStack 去除空格的经验。一种方法是将% this % 更改为% this -%,这会导致不附加换行符,因此如果您有一行仅包含% this -%,那么它不会在生成的html 中显示为任何内容。

【讨论】:

很好,我试试看。【参考方案3】:

a ticket in Django's issue tracker 关于更好地处理空格。它于 2014 年以 wontfix 的形式关闭,以下comment:

据我所知,核心团队的共识是:

Django 模板语言足以生成对空格不敏感的 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 ... % 和其他位就不会添加不需要的空格或换行符。 Source here.

【讨论】:

以上是关于Django 模板生成凌乱的空白 HTML的主要内容,如果未能解决你的问题,请参考以下文章

自定义/删除 Django 选择框空白选项

无法使用模板删除生成的单词中的空白行

HTML HTML5空白模板+ jQuery

HTML 空白模板 - HTML + jQuery + CSS

HTML HTML5空白源代码模板

Jinja 模板的 % spaceless % 标签?