Шаблон Django удаляет завершающую запятую из цикла for, если выполнено условие - PullRequest
0 голосов
/ 31 октября 2018

Я создаю список предметов с их атрибутами в Django. Я получаю элементы и их атрибуты из устаревшей базы данных, используя хранимые процедуры sql, поэтому возможность получить что-то вроде elegeant как {% для атрибута в item.atributes_set.all%} не представляется возможным.

Что у меня есть это:

{% for article in articles%}
  {{article.title}}:
  {% for attribute in attributes %}
    {% if article.supplierID == attribute.SupplierID and article.ItemID = attribute.ItemID %}
      {{attribute.value}},
    {% endif %}
  {% endfor %}
{% endfor %}

Была ли возможность удалить запятую на последнем элементе, который соответствует условию оператора if?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

у меня работает:

{% for article in articles%}
  {{article.title}}:
  {% for attribute in attributes %}
    {% if article.supplierID == attribute.SupplierID and article.ItemID = attribute.ItemID %}

      {% if not forloop.last %}
         {{ attribute.value }},
      {% else %}
         {{ attribute.value }}
      {% endfor %}

    {% endif %}
  {% endfor %}
{% endfor %}

forloop.last

https://docs.djangoproject.com/en/2.1/ref/templates/builtins/#for

0 голосов
/ 31 октября 2018

Мне не нравится такая логика в шаблоне, поэтому я могу предложить перенести ее в поле зрения. Обновление контекста передается в шаблон следующим образом:

articles_data = dict()
for article in articles:
    # following line is little bit long, but you can rewrite it with regular for loop
    # Note, attribute values should be in list
    articles_data[article.title] = [attribute.value for attribute in attributes \
                            if article.supplierID == attribute.SupplierID and article.ItemID = attribute.ItemID]

Когда вы передадите articles_data в шаблон, вы можете просто сделать:

{% for title, attributes in articles_data.items %}
    {{title}}:
    {{attributes|join:', '}}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...