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

时间:2015-01-05 14:16:12

标签: django django-templates

我将Python 3.4 + Django 1.7.1Eclipse - PyDev一起使用,并使用AcroEdit编辑HTML。

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

我在custom_tag中制作了名为custom_tag_library.py的自定义模板标记,如:

# -*- 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有很多空格和空行,如下所示:

Google Chrome DOM Inspector

我尝试了{% spaceless %} {% endspaceless %},但它无法正常使用。

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我有完全相同的问题。你想拥有干净的模板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. 将其作为新的HttpResponse
  5. 返回

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