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的主要内容,如果未能解决你的问题,请参考以下文章