避免在django模板HTML表中重复“if conditions”

时间:2016-08-04 01:32:41

标签: html django django-templates html-table

根据访问网页的用户,生成的HTML表格可能会显示额外的列。我当前的实现检查了模板文件中每一行的标志,其中show_secret_column是由视图设置的标志:

<div class="table-responsive">
    <table class="table">
        <thead>
            <tr>
                <th class="col-md-4">Column 1 Header</th>
                <th class="col-md-2">Column 2 Header</th>
                <th class="col-md-2">Column 3 Header</th>
                {% if show_secret_column %}
                <th class="col-md-2">Secret Column Header</th> 
                {% endif %}
            </tr>
        </thead>
        <tbody>
            {% for row in row %}
            <tr>
                <td>{{ row.a }}</td>
                <td>{{ row.b }}</td>
                <td>{{ row.c }}</td>
                {% if show_secret_column %}
                <td>{{ row.secret }}</td>
                {% endif %}
            </tr>
            {% endfor %}
        </tbody>
    </table>
</div>

这是一种不好的方法吗?是否有任何其他方法建议在模板中执行此检查一次并生成额外的列?

1 个答案:

答案 0 :(得分:1)

如果你真的想对行数进行微量优化(我强烈建议你不要这样做)你可以像这样复制模板:

{% if show_secret_column %}
    <thead>
        <tr>
            <th class="col-md-4">Column 1 Header</th>
            <th class="col-md-2">Column 2 Header</th>
            <th class="col-md-2">Column 3 Header</th>
            <th class="col-md-2">Secret Column Header</th> 
        </tr>
    </thead>
    <tbody>
        {% for row in row %}
        <tr>
            <td>{{ row.a }}</td>
            <td>{{ row.b }}</td>
            <td>{{ row.c }}</td>
            <td>{{ row.secret }}</td>
        </tr>
        {% endfor %}
    </tbody>
{% else %}
    <thead>
        <tr>
            <th class="col-md-4">Column 1 Header</th>
            <th class="col-md-2">Column 2 Header</th>
            <th class="col-md-2">Column 3 Header</th>
        </tr>
    </thead>
    <tbody>
        {% for row in row %}
        <tr>
            <td>{{ row.a }}</td>
            <td>{{ row.b }}</td>
            <td>{{ row.c }}</td>
        </tr>
        {% endfor %}
    </tbody>
{% endif %}

我只想重复一遍,如果我在代码中看到这一点,我会感到震惊。它现在非常脆弱(您必须小心复制对这两个部分所做的所有更改)。这也是一个臃肿和眼眶。

你的主要目标应该是首先没有一个40k行的表。也就是说,这会做你要求的。