我想仅在内容可用时才显示周围的HTML。
例如,仅当user_data.x
或user_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,而这似乎是一个非常常见的问题。
答案 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时才会起作用 - 但你可以为每个现有模型添加一个属性来生成该数据