【问题标题】:Django template: {% if 5 in ['4', '3', '5'] %} doesn't workDjango 模板:{% if 5 in ['4', '3', '5'] %} 不起作用
【发布时间】:2018-11-09 13:26:23
【问题描述】:

form.tickets.value 的值为['29', '4', '7'] ticket_id 的值有 5、3、7 等。

现在如果列表中存在 7,我想打印 YES。但它总是说“不”。谁能告诉我为什么?

{% if ticket_id in form.tickets.value %}
    YES
{% else %}
    {{ ticket_id }} not in {{ form.tickets.value }}
{% endif %}

【问题讨论】:

  • 在Python/Django模板语言中,整数7不等于字符串'7'
  • 你知道我如何在模板中更改它吗?
  • 5 不在['4', '3', '5'] 中,但'5' 在。
  • 好的,我明白了。我的问题是我从这个for循环{% for ticket_id, ticket_label in form.tickets.field.choices %}得到ticket_id。我不确定如何解决这个问题。

标签: python django


【解决方案1】:

在 Python 中,变量的 类型 很重要。您正在将整数与字符串列表进行比较。由于类型不同,值将永远相等(即使它们“看起来”相同)。

您可以将列表转换为整数列表而不是字符串,或者将要比较的整数转换为字符串。这是后者的一个示例,使用 Django 的内置模板过滤器之一:

{% if ticket_id|stringformat:"s" in form.tickets.value %}

【讨论】:

  • 我实际上刚刚意识到我必须反过来转换它。原因是我的 UpdateView 给了我这个格式: 29 in [29, 28] 这解释了为什么它在那里工作。您如何将 ['4', '3', '5'] 转换为 [4, 3, 5]?
  • 简单的解决方案:
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 2013-02-03
  • 2020-07-12
  • 2020-08-09
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多