仅在从数据库中找到内容时显示div

时间:2016-01-07 12:38:24

标签: django django-templates

我想仅在内容可用时才显示周围的HTML。

例如,仅当user_data.xuser_data.y具有值时,才会呈现以下HTML:

<div class="toggle toggle-primary" data-plugin-toggle="">
    <section class="toggle blue">
        <label>User data</label>
        <div class="toggle-content">
            <table>
                {% if user_data.x %}<tr>
                    <th>Data x</th>
                    <td>{{ user_data.x }}</td>
                    </tr>
                </tr>{% endif %}
                {% if user_data.y %}<tr>
                    <th>Data y</th>
                    <td>{{ user_data.y }}</td>
                    </tr>
                </tr>{% endif %}
            </table>
        </div>
     </section>
</div>

使用Django最方便的方法是什么?

我正在显示来自多个数据库表的部分数据。因此,在整个HTML上制作大if不会跟随DRY。

使用自定义标记来测试可用性并呈现内容可以解决问题。但是,我发现这个解决方案令人担忧,因为它很难分散HTML,而这似乎是一个非常常见的问题。

1 个答案:

答案 0 :(得分:1)

我可能会在你的视图中做这样的事情

user_data.all = [user_data.x, user_data.y, ...]

user_data.any = any(user_data.all)

模板中的

{% if user_data.any %} {% for elem in user_data.all %} <tr> <th>{{ elem.title }}</th> <td>{{ elem.data }}</td> </tr> {% endfor %} {% endif %}

显然,只有当每个元素都有.title和.data时才会起作用 - 但你可以为每个现有模型添加一个属性来生成该数据