Перебор данных в шаблоне Django

#python #django

#python #django

Вопрос:

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

 {% for id,total in list_summary.items %}
    <tr class="{% cycle 'row1' 'row2' %}" >
        <td>{{id}}</td>
        <td>{{total}}</td>
    </tr>
{% endfor %}
  

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

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

Мой код просмотра находится здесь:

 lists=lists.objects.filter(user_id=user_id)
list_summary={}
# make a dictionary that we wil iterate over in template. The dictionary has the total spend for each deal 
for list in lists:
    id       = list.id
    name     = list.deal_name
    price    = list.normal_price
    quantity = list.quantity
    total    = price * quantity
    try:
        list_item=list_summary[id]
        old_total=list_item['total']
        list_summary[id]={'name':name, 'total':old_total   total}
    except:
        list_summary[id]={'name':name, 'total':total}
context = {
           'list_summary':list_summary,
        }
return render_to_response("lists.html", context)
  

Любая помощь будет высоко оценена!

Заранее большое спасибо

Богатый

Комментарии:

1. Вы уже пробовали агрегацию ?

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

Ответ №1:

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

Почему бы и нет? Значения также являются парами ключ / значение..

 {% for list_id, dict in list_summary.items %}
    list_id: {{ list_id }}
    {% for k, v in dict.items %}
        key: {{ k }} <!-- name, total -->
        value: {{ v }} 
    {% endfor }
{% endfor %}


{% for list_id, value in list_summary.items %}
    list_id: {{ list_id }}
    Name: {{ value.name }}
    Value: {{ value.value }
{% endfor %}
  

Комментарии:

1. Это сделало свое дело, было просто немного запутанно перебирать что-то, из чего я просто хотел получить 2 значения. Я все еще не уверен, что это лучший способ сделать это, конечно, есть лучший способ построения данных, чтобы я мог повторять список плоских объектов, а не вставлять циклы for .

2. Также мне пришлось использовать общее значение в качестве ключа и имя сделки по мере их значения, это просто странно!

3. Если вы хотите получить доступ к определенным атрибутам или элементам в шаблоне, вы можете использовать точечную нотацию, и django попробует все виды поиска, чтобы получить нужное вам значение. {{ dict.name }} должно дать вам нужное значение