Шаблон Django - Установите значение элемента на основе некоторого значения в другом месте - PullRequest
1 голос
/ 28 декабря 2011

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

  1. Сначала я получаю все различные значения первого атрибута.
  2. Во-вторых, я получаю все отличные значения второго атрибута.
  3. Наконец я получаю список всех объектов
  4. Затем я перебираю значения столбца и отображаю все объекты в списке, которые имеют одинаковое значение для обоих атрибутов

Однако, возможно, некоторые объекты имеют первый атрибут, а не второй, поэтому я не хочу отображать имя этого атрибута. Может быть, этот фрагмент шаблона сделает его более понятным. Он содержит только inner two loops

{% for attr2 in attr2_list %}
    <li class='category'>  {{ attr1.attr1 }}
        <ul> 
            {% set counter = 0 %}
            {% for object in object_list %}
                {% if object.attr1 == attr1.attr1 and object.attr2 = attr2.attr2 %}
                    {% increment counter %}
                    <li><a href="{{ object.get_absolute_url }}"> Test {{counter}} </a></li>
                 {% endif %}
            {% endfor %}
        </ul>
    </li>
{% endfor %}

То, что я хочу, это то, что если цикл for не выполняется для определенного attr2, тогда я не хочу отображать это <li class='category'> {{ attr1.attr1 }}

Надеюсь, я ясно дал понять. Заранее спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Вы ведете проигрышную битву, пытаясь сделать это в своем шаблоне: самое близкое решение для вас здесь - это тег regroup , но это не так, как вы в первую очередь ищет и полагается на элементы, сортируемые по сгруппированному атрибуту.

На ваш взгляд, вы, вероятно, хотите что-то вроде этого:

grouped = {}
for obj in object_list:
    grouped.setdefault(obj.attr1, {}).setdefault(obj.attr2, []).append(obj)

Это должно дать вам словарь, ключами которого являются значения attr1, а значения являются словарями, отображающими значения attr2 в списки элементов с этими атрибутами.

1 голос
/ 28 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...