【问题标题】: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


    【解决方案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.

    【讨论】:

      猜你喜欢
      • 2015-09-18
      • 2012-01-02
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多