Django模板格式化导致“衣衫褴褛”的HTML

时间:2011-05-05 21:33:28

标签: django templates

为方便起见,我在模板中使用了一些格式(换行符,间距等)例如:

{% extends "base.html" %}

{% load tabs %}

{% block content %}
{% block navigation %}
<ul id="user_admin_tabs_list">
    <li><a href="{% url user_admin.views.profile %}" class=
    {% ifactivetab "user_admin_tabs" "profile" %}
        "user_admin_tabs_active_tab"
    {% else %}
        "user_admin_tabs_inactive_tab"
    {% endifactivetab %}>Профиль</a></li>

...

但这会导致“乱七八糟”的html输出。像这样:

<ul id="user_admin_tabs_list"> 
    <li><a href="/accounts/profile/profile/" class=

        "user_admin_tabs_active_tab"
    >Профиль</a></li> 

    <li><a href="/accounts/profile/shops/" class=

        "user_admin_tabs_inactive_tab"
    >Магазины</a></li> 

    <li><a href="/accounts/profile/billing/" class=

        "user_admin_tabs_inactive_tab"
    >Биллинг</a></li> 

    <li><a href="/accounts/profile/settings/" class=

        "user_admin_tabs_inactive_tab"
    >Настройки</a></li> 
</ul> 

因此,模板的可读性导致输出html的可读性差。

这个问题的决定是什么?

2 个答案:

答案 0 :(得分:2)

老实说,我不担心模板引擎的输出。您将要编辑模板而不是输出,因此为了可维护性,只有模板 HTML结构良好才真正重要。当然,如果有人在您的网页上使用“查看来源”,他们会看到一堆乱七八糟的HTML,但这并不重要。

也就是说,您可以尝试使用Django的spaceless tag来获得更漂亮的HTML输出。


修改

对于这种特定情况,您可以将ifactivetab标记内联:

<li><a href="{% url user_admin.views.profile %}" class="{% if activetab "user_admin_tabs" "profile" %}user_admin_tabs_active_tab{% else %}user_admin_tabs_inactive_tab{% endifactivetab %}">Профиль</a></li>

答案 1 :(得分:1)

我过去曾想过这个。

您最好的选择IMO是使用tidy之类的内容对输出进行后期处理。它是用C语言编写的,因此速度非常快,并且不会产生很大的性能损失。它是开发中的一个选项,但在高流量站点上不是您想要的。

您需要将其配置为仅缩进代码。

副手,我认为它可能会尝试清理无效标记,这会让你在启用/禁用它时挠头。需要注意的事项,因为文档的结构可能会因此而改变。

如果你是“查看源代码”,那就太好了,但你最好还是使用firebug检查你的输出 - 如果这是动机。