【问题标题】:Django Template IF inside Listing FOR列表中的 Django 模板 IF FOR
【发布时间】:2020-05-06 17:43:31
【问题描述】:

我正在尝试使用 FOR LOOP 内的 IF 结构中的列表中的对象,但是当我尝试将对象与字符串(即“TRUE”)进行比较时,我无法进入 True case 行IF结构。

示例: 当equipo.Department =“Equipo”时,我不知道为什么IF({% ifequipo.Department == 'Equipo' %})不起作用。

代码:

{% autoescape off %}

{% if equipos %}
{% for equipo in equipos %}
<tr></tr>
    <td>{% if equipo.Department == 'Equipo' %}
        E
        {% else %}{{ equipo.Department }}{% endif %}-{{ equipo.Equipment_id }}</td>
    <td>{{ equipo.Name }}</td>
    <td>{{ equipo.Description }}</td>
    <td>{{ equipo.SerialNo }}</td>
    <td>{{ equipo.Vendor }}</td>
    <td>{{ equipo.Tag }}</td>
    <td>{{ equipo.OutOfService }}</td>
    <td>{{ equipo.Location }}</td>
    <td>{{ equipo.Plan }}</td>
    <td>{{ equipo.ManualPath }}</td>
    <td>{{ equipo.ImagePath }}</td>
</tr>
{% endfor %}
{% else %}
<h1>No existen registros</h1>
{% endif %}
{% endautoescape %}

【问题讨论】:

  • Department 可能不是CharField,而是ForeignKey
  • 可以分享一下相关模型吗?
  • 是否有可能更响应
  • Willem,你的没错系来自ForeingKey:
  • Department = models.ForeignKey(Departamento, null=True, blank=True, on_delete=models.CASCADE)

标签: django for-loop if-statement templates


【解决方案1】:

'Equipo' 为名称的Department 对象与字符串'Equipo' 相同,因此检查本身为假。如果您稍后渲染 {{ equipo.Department }},那么 Django 将对该结果调用 str(..) 方法,因此它确实会渲染部门的名称。

因此,您应该检查等价性:

{% if equipo.Department.name == 'Equipo' %}
    <!-- … -->
{% endif %}

话虽如此,您最好在数据库端进行过滤,而不是在模板中进行过滤,因此通常最好尝试避免检索不属于所需部门的equipo .

你可以过滤例如:

SomeModel.objects.filter(<b>Department__name='Equipo'</b>)

注意:Django 有一个{% for … %}…{% empty %} template tag [Django-doc] 如果您迭代的集合为空,则可用于呈现消息。

【讨论】:

  • 非常感谢,我使用了equipo.Departmen.Name,现在可以使用了
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2020-05-27
  • 2021-10-17
相关资源
最近更新 更多