Django模板条件HTML

7 投票
1 回答
9234 浏览
提问于 2025-04-18 04:23

我不太确定标题是否准确(抱歉,我刚接触python和django)

我有一个模板页面,它会根据应用程序的状态显示应用是运行中还是已停止。例如:

如果应用正在运行,我想显示:

<div class="lt">
    <a class="play" title="App running">
        <span class="text_play">Running</span>
    </a>
</div>
<div class="rt">
    <input type="submit" onclick="stop_app()" value="stop" class="stop">
</div>

如果应用没有运行,那就显示这个:

<div class="lt">
    <input type="submit" onclick="star_app()" value="start" class="play">
</div>
<div class="rt">
    <a class="stop" title="Application is not running">
        <span class="test_stop">Not Running</span>
    </a>
</div>

这段HTML有点简化,但我想表达的是,怎么才能避免重复写代码呢?

这个模板会接收一个包含应用程序的字典,然后遍历这个字典来显示所有应用程序及其状态(运行中/已停止)。所以目前我需要遍历这个字典两次,一次是为了“已停止”的应用,另一次是为了“正在运行”的应用。

希望这样说清楚了

提前谢谢你

编辑:这是我到目前为止尝试的:

{% if application.service.status|lower == "enabled" %} 
<div>...display running HTML...</div>
{% else %}
<div>...display the non-runing HTML..</div>
{% endif %}

我只是想知道我这样做是否正确(遵循DRY原则吗?)

1 个回答

9

你提的方案挺干净利落的。

{% if application.service.status|lower == "enabled" %} 
<div>...display running HTML...</div>
{% else %}
<div>...display the non-runing HTML..</div>
{% endif %

记住,你需要依赖返回的 render(request...) 来确定 Django 需要构建的 HTML。

你提的解决方案会选择其中一个。也就是说,如果你原本不运行的 HTML 需要切换到运行的 HTML,你就得再进行一次渲染才能访问它。

更清楚地说,Django 模板会构建合适的 HTML,而不考虑其他选项或“条件”。

如果你学一点 jQuery,比如说,你可以让页面上的某些元素切换当前显示的 HTML。再进一步使用 ajax,你就可以从服务器获取状态更新,反之亦然。

撰写回答