Django模板中对比datetime值实现事件时间段差异化显示
你的代码出错的核心原因:Django模板的{% if %}标签内部不需要再用{{ }}包裹变量,你原来的写法是把两个包含{{的字面量字符串做对比,自然永远不会相等。
以下是两种可直接在模板层实现需求的方案:
方案1:直接对比日期属性(更推荐,性能更高)
直接调用datetime对象自带的date属性获取日期部分做对比,不需要额外格式化字符串:
<li> {% if date.start.date == date.end.date %} {{ date.start|date:"D d M Y" }} {{ date.start|time:"H:i" }} to {{ date.end|time:"H:i" }} {% else %} {{ date.start|date:"D d M Y H:i" }} to {{ date.end|date:"D d M Y H:i" }} {% endif %} </li>
方案2:按格式化字符串对比(适用于有特殊日期格式适配的场景)
如果需要严格按指定格式的日期结果对比,直接在if条件内调用过滤器即可,不需要嵌套变量输出语法:
<li> {% if date.start|date:'D d M Y' == date.end|date:'D d M Y' %} {{ date.start|date:"D d M Y" }} {{ date.start|time:"H:i" }} to {{ date.end|time:"H:i" }} {% else %} {{ date.start|date:"D d M Y H:i" }} to {{ date.end|date:"D d M Y H:i" }} {% endif %} </li>
如果你的项目开启了时区支持,只要确保存储的datetime值已经做了正确的时区转换,上述两种方案都可以正常生效。
内容的提问来源于stack exchange,提问作者Simon Powell
相关产品推荐
相关产品推荐

