Django模板中的FOR OR语句

时间:2019-06-05 19:03:06

标签: python django django-templates django-template-filters

我想最小化模板中的代码,因为我想显示的项目很多。要输出的变量是相同的,并且im使用相同的模板。详细信息如下

我尝试了for或statement,但是我得到的错误是'for'语句应使用格式'for x in y':用于(shoe_list或cup_list)中的项目

这是原始代码

{% extends 'base_generic.html' %}
{% load static %}
{% block content %}


<body>

  <h1 class="titleheadline"> List of items</h1>

{% if shoe_list %}
    {% for item in shoe_list %} 
      <td>{{req.colour}}</td>
      <td>{{req.size}}</td>
      <td>{{req.price}}</td>
  {% endfor %}

{% elif cup_list %}
    {% for item in cup_list %}

      <td>{{req.colour}}</td>
      <td>{{req.size}}</td>
      <td>{{req.price}}</td>

  {% endfor %}

  {% else %}
    <p>There are none in stock.</p>
  {% endif %}

</body>      

{% endblock %}

以下是我所做的不起作用的更改

{% extends 'base_generic.html' %}
{% load static %}
{% block content %}

<body>

  <h1 class="titleheadline"> List of items</h1>

{% if shoe_list or cup_list  %}
    {% for item in (shoe_list or cup_list) %} 
      <td>{{req.colour}}</td>
      <td>{{req.size}}</td>
      <td>{{req.price}}</td>
  {% endfor %}
  {% else %}
    <p>There are none in stock.</p>
  {% endif %}

</body>      

{% endblock %}

我希望减少代码以提供与原始代码相同的结果。

1 个答案:

答案 0 :(得分:1)

一种方法是在服务器端组合这些列表,然后遍历包含模板中所有内容的单个列表。

例如:

观看次数

# If shoe_list and cup_list are querysets
from itertools import chain
combined_list = list(chain(shoe_list, cup_list))

模板

{% for item in combined_list %} 
    <td>{{item.colour}}</td>
    <td>{{item.size}}</td> 
    <td>{{item.price}}</td>
{% else %}
    There are none in stock.
{% endfor %}