如何从 Django 中的 HTML 中删除空格和空行?

How to remove spaces and empty lines from HTML in Django?

我使用 Python 3.4 + Django 1.7.1Eclipse - PyDev 并且我使用 AcroEdit 编辑 HTML.

我认为AcroEdit使用两个软空格来缩进。

我在 custom_tag_library.py 中创建了一个名为 custom_tag 的自定义模板标签,例如:

# -*- coding: utf-8 -*-
from django import template
from _ast import Num

register = template.Library()

@register.inclusion_tag('custom_tag.html')
def custom_tag(content):
    return {'content': content, 'children': content.children.all()}

custom_tag.html:

{% load custom_tag_library %}
<div class = 'a'>
  {{ content.name }}
  {% if children %}
    <div class = 'b'>
      {% for child in children %}
        {% custom_tag child %}
      {% endfor %}
    </div>
  {% endif %}
</div>

(如您所见,内容对象有名称和子项)

所以,custom_tag 是一个递归标签,给出了一个以 <div> 层次结构表示的树结构。

但是当我使用它时,输出 HTML 有很多空格和空行,如下所示:

我试过{% spaceless %}{% endspaceless %},但是没用。

我认为这是因为我使用缩进来提高代码的可读性。但是我想保持关于缩进的编码风格。

我该如何解决这个问题?

我遇到了完全相同的问题。你想要干净的模板 html 文件,你可以轻松阅读(你得到的),同时你希望在呈现它时具有人类可读的 html。

所以您不会满意将 templatetag.html 文件更改为类似旧 php 意大利面条的解决方案:

{% load custom_tag_library %}
<div class = 'a'>{{ content.name }}
  {% if children %}<div class = 'b'>
      {% for child in children %}{% custom_tag child %}{% if not forloop.last %}
      {% endif %}{% endfor %}
    </div>{% endif %}
</div>

第二个解决方案(也是最好的一个)是使用一个中间件来读取每个 HttpResponse 并将其重写为更整洁的内容。

您可以在 PyEvolve website 上找到您想要的内容。它的作用基本上是:

  1. 用 BeautifulSoup
  2. 解析你的 HttpResponse html
  3. 美化它(用很酷的缩进)
  4. Return 它作为新的 HttpResponse

但是使用此解决方案,您可能会遇到性能问题。