【问题标题】:Django Templates generate messy whitespace HTMLDjango 模板生成凌乱的空白 HTML
【发布时间】:2013-07-28 00:15:19
【问题描述】:
如何使生成的 HTML 在 whitespce 方面更清晰?
Django Templating 似乎对此很草率。
例如,它识别的标签,如 IF 或 FOR 被解析然后替换为空行。
另一个例子是当我包含一个包含 N 个 HTML 代码链接的文件时。如果 include 语句是制表符,则被包含文件中的第一个链接适当地缩进,其余的被拉到左边。
等等。
{% spaceless %} 似乎什么也没做。
是否有关于如何处理空白的设置?
还是其他解决方案?
谢谢。
【问题讨论】:
标签:
django-templates
whitespace
removing-whitespace
【解决方案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.