ЗА ИЛИ оператор в шаблоне Django - PullRequest
0 голосов
/ 05 июня 2019

Я хочу минимизировать свой код в моем шаблоне, потому что элементов, которые я хотел бы отобразить, много.Переменные для вывода одинаковы, и я использую тот же шаблон.Подробности приведены ниже

Я пытался использовать оператор или, но ошибка, которую я получаю, заключается в том, что операторы «для» должны использовать формат «для x в 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 Ответ

1 голос
/ 05 июня 2019

Один из подходов состоит в том, чтобы объединить эти списки на стороне сервера и затем зациклить один единственный список, который содержит все в шаблоне.

Например:

вид

# 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 %}
...