如何在Django模板中编写正确的多条件IF判断,实现object.star匹配多个指定值
解决Django模板中多值匹配的IF判断问题
我来帮你搞定这个Django模板的条件判断问题!你遇到的问题是因为对模板中or的用法理解有误,咱们一步步来修正:
错误原因分析
你原来写的条件:
{% if object.star == "four" or "five" %}
在Django模板语法里,or的两侧必须是完整的布尔表达式。而你这里的"five"是一个非空字符串,会被直接判定为True,所以这个条件实际上等价于object.star == "four" or True,结果永远为真,完全达不到你想要的"匹配four或five"的效果。之前用and时只有第一个值生效,也是同样的道理:object.star == "four" and "five"等价于object.star == "four" and True,只有当object.star等于four时才会成立。
正确的两种写法
写法1:完整的多条件判断
把每个比较都写完整,用or连接:
{% if object.star == "four" or object.star == "five" %}
写法2:使用in操作符(更简洁)
直接检查object.star是否在目标值列表中:
{% if object.star in ["four", "five"] %}
修正后的完整代码
下面是替换了正确条件后的完整模板代码:
{% for object in object_list %} {% if object.star in ["four", "five"] %} <div class="col mb-5"> <div class="card h-100"> <!-- Product image--> <img class="card-img-top">{{object.thumbnail_tag}} <!-- Product details--> <div class="card-body p-4"> <div class="text-center"> <!-- Product name--> <a href="{% url 'detail' object.slug %}"><h5 class="fw-bolder">{{object.name}}</h5></a> <!-- Product reviews--> <div class="d-flex justify-content-center small text-warning mb-2"> {% if object.star == "four" %} <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> {% elif object.star == "five" %} <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> <div class="bi-star-fill"></div> {% endif %} </div> <!-- Product price--> {% if object.newprice == none %} {{object.currency}}{{object.price}} {% else %} <span class="text-muted text-decoration-line-through">{{object.currency}}{{object.price}}</span> <span style="color: #ffc107;">{{object.newprice}}</span> {% endif %} </div> </div> <!-- Product actions--> <div class="card-footer p-4 pt-0 border-top-0 bg-transparent"> <div class="text-center"><a class="btn btn-outline-dark mt-auto" href="#">Add to cart</a></div> </div> </div> </div> {% endif %} {% endfor %}
这样就不用写两个独立的IF判断啦,代码更简洁易读。
内容的提问来源于stack exchange,提问作者saleh
相关产品推荐
相关产品推荐

