Django 模板变量条件不能正确评估?

时间:2021-07-12 03:50:34

标签: django templates variables

这对我来说没有明显的意义。正如您在下面的代码中看到的,我从 django 中的各种页面上下文对象中提取客户订阅数据。正如您在附加的屏幕截图中看到的那样,变量有效,并且(除非 django 模板变量值是类型转换的?)这些值实际上是匹配的。

根据 if 条件,当页面加载时,客户(用户对象)的现有订阅应该被归类为“活动”,但事实并非如此?

<div class="card-deck">
    {% for product in products %}
    request.user.is_paysubscribed = {{ request.user.is_paysubscribed }}<br />
    product.metadata.tier = {{ product.metadata.tier }}<br />
    <div class="card mb-4">
     {% for price in product.plan_set.all %}
     <div class="card-body{% if request.user.is_paysubscribed == product.metadata.tier %} active"{% else %}"{% endif %} id="{{ product.name|slugify }}-card" role="button" onclick="planSelect('{{ product.name|slugify }}-card', '{{ product.name }}', '{{ price.human_readable_price }}', '{{ price.id }}')">
      <h5 class="card-title text-center"><label for="{{ product.name }}">redacted product name</label></h5>
      <p class="text-center">{{ price.human_readable_price }}</p>
      <p class="card-text">{{ product.description }}</p>
    </div>
    {% endfor %}
  </div>
  {% endfor %}
</div>

enter image description here

1 个答案:

答案 0 :(得分:0)

tl;dr:值类型转换的。在我的例子中,user.is_paysubscribed 是数据库中的一个 int 字段,而 product.metadata.tier 只是添加到 Stripe 产品的自由格式字段中的额外内容,因此(可能)作为字符串返回。

在对类似问题的回复中找到了将它们都转换为整数的解决方案:

https://stackoverflow.com/a/36808765/7488096

django 中的 |(math):value 过滤器将值重新转换为 int。

因此,|add:"0" 使它们都是整数,然后进行比较。