Django方式做条件格式化

And*_*ler 8 python django formatting django-templates

在Django中进行条件格式化的正确方法是什么?

我有一个包含日期字段的模型,我想显示一个记录列表,但是根据该日期字段的值为行着色.例如,匹配今天我希望为黄色的日期的记录,在今天之前我想要绿色的记录和在我想要红色之后的记录.

在Django的某个地方,您需要进行比较,将当前日期与记录中的日期进行比较.

我可以看到可以进行比较的三个不同的地方:

  1. 向我的模型添加一个方法,例如status(),它返回'past','present','future',然后在模板中使用它来为行着色.
  2. 在视图中,不是将查询集返回给模板,而是预处理列表并比较每个记录,构建一个包含要在模板中使用的"过去","当前"和"未来"值的新dict
  3. 创建一个用于进行比较的新模板标记.

以下哪种方法是正确的Django方式呢?听起来像条件​​格式化会经常出现,并且由于您无法在模板中进行任意比较,因此需要一些其他解决方案.

这同样适用于更简单的格式规则,例如,如果我想显示学生成绩列表,我想让那些高于80%绿色和低于30%红色的那些.

S.L*_*ott 8

我非常喜欢将所有"业务"逻辑放在视图函数和模板/ CSS中的所有表示中.

选项1是理想的选择.您返回一对配对列表:(日期,州),其中州是类名("过去","现在","未来").

然后,您的模板将状态信息用作a的类<span>.然后,您的CSS会为该范围提供颜色编码.

您现在可以自由更改规则而不会破坏模板.您可以在不触及HTML或Python代码的情况下更改CSS.

{% for date,state in the_date_list %}
    <span class="{{state}}">date</span>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

  • 很好的解决方案但是......当客户端(浏览器)与服务器(django服务器)位于不同的时区时,它真的涵盖了这种情况吗?如果您需要根据客户端时间进行颜色编码,那么知道什么是最佳方法会很有趣. (3认同)