Python Django实现条件格式的方法

Python Django实现条件格式的方法,python,django,formatting,django-templates,Python,Django,Formatting,Django Templates,在Django中进行条件格式设置的正确方法是什么 我有一个包含日期字段的模型,我想显示一个记录列表,但根据该日期字段的值为行着色。例如,匹配今天日期的记录我希望为黄色,在今天之前的记录我希望为绿色,在今天之后的记录我希望为红色 在Django的某个地方,您需要进行比较,将当前日期与记录中的日期进行比较 我可以看到三个不同的地方可以进行比较: 向我的模型添加一个方法,例如status(),该方法返回“过去”、“现在”、“未来”,然后在模板中使用该方法为行着色 在视图中,不向模板返回查询集,而是预处

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

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

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

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

  • 向我的模型添加一个方法,例如status(),该方法返回“过去”、“现在”、“未来”,然后在模板中使用该方法为行着色
  • 在视图中,不向模板返回查询集,而是预处理列表并比较每条记录,构建一个新的dict,其中包含要在模板中使用的“过去”、“现在”和“未来”值
  • 创建执行比较的新模板标记
  • 以下哪种方法是正确的Django方法?这听起来像是经常出现的条件格式化,而且由于您不能在模板中进行任意比较,因此需要其他一些解决方案


    这同样适用于更简单的格式规则,例如,如果我想显示学生成绩列表,我想将高于80%的成绩设置为绿色,低于30%的成绩设置为红色。

    由于您正在进行静态比较(无需查询),您应该选择最干燥、最易于实现的选项。在这种情况下,我会选择选项4,制作一个模板过滤器。然后你可以做value | filter来获得你需要设置背景颜色的类。模板过滤器实际上比模板标签要简单一些;由于这与业务逻辑非常相关,因此我添加了一个模型方法来管理此类信息,然后在模板中使用:

    {% if not bug.within_due_date %}bgcolor="OrangeRed"{% endif %}
    

    也可以通过模板标签或过滤器获得;但在我的例子中,我觉得逻辑的最佳位置是在模型内部;我建议您以同样的方式进行分析。

    我非常喜欢将所有“业务”逻辑放在视图函数中,将所有表示放在模板/CSS中

    选择1是理想的。返回一个成对的列表:(日期,状态),其中状态是类名(“过去”、“现在”、“未来”)

    然后,模板将状态信息用作
    的类。然后,您的CSS为该范围提供颜色编码

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

    {% for date,state in the_date_list %}
        <span class="{{state}}">date</span>
    {% endfor %}
    
    {%表示日期,在日期列表%中声明]
    日期
    {%endfor%}
    
    您还可以查看Django关于内置格式和过滤标记的参考资料。它当然有你正在寻找的和更多的,这是一个很好的链接有书签


    您可以查看一下。

    这是一个很好的解决方案,但是,对于多个模型,您必须将模型方法复制到您要使用的其他每个模型,让这条路线有点湿。模型继承或实用程序函数都会减少代码重复。@googletorp:这个问题只提到一个模型。分配类名所需的代码量很小,可以是单独的、可重用的函数,也可以是超类的一部分。。。它是否真的涵盖了客户端(浏览器)与服务器(django服务器)处于不同时区的情况?如果您需要根据客户端时间进行颜色编码,那么您想知道在这种情况下,什么是最好的方法。