Вывод списка по ключу в шаблоне django - PullRequest
0 голосов
/ 27 января 2020

Я возвращаю список из представления и хочу вывести указанное значение c по ключу в шаблоне.

возвращенный список (список _)

[
{'category 1': 1},
{'category  2': 3},
{'category 3': 4}, 
]

В шаблоне :

{{ list_.2.category 3}}

возвращает 4.

Можно ли упростить тег шаблона и вывести его только клавишей?

Например:

{{ list_.key['category 3'] }}

Мой взгляд:

def MapView(request):
    applications = Application.objects.values(
        'name', 'id', 'icon_name').filter(organization_id=1).order_by('name')
    devices = Device.objects.all()
    count_list = []

    for a in applications:
        count_num = devices.filter(id=a['id']).count()
        count_list.append({
            a['name']: count_num
        })

    context = {
        'test': count_list,
    }

    return render(request, 'applications/map.html', context)

Ответы [ 3 ]

2 голосов
/ 27 января 2020

Преобразование list из dict в dict

Пример:

from collections import ChainMap

list_ = [{'category 1': 1}, {'category  2': 3}, {'category 3': 4}]
list_ = dict(ChainMap(*list_))
print(list_)

В шаблоне:

{{ list_.category 3}}

Примечание : я предположил, что у вас есть уникальные ключи.


Похоже, вы можете использовать collections.defaultdict

Пример:

from collections import defaultdict

def MapView(request):
    applications = Application.objects.values(
        'name', 'id', 'icon_name').filter(organization_id=1).order_by('name')
    devices = Device.objects.all()
    count_list = defaultdict(int)

    for a in applications:
        count_list[a['name']]+= devices.filter(id=a['id']).count()

    context = {
        'test': count_list,
    }

    return render(request, 'applications/map.html', context)
0 голосов
/ 27 января 2020

Вы не можете использовать квадратные скобки в шаблоне, но вы можете создать собственный простой тег :

@register.simple_tag(name=access_lst)
def access_list_of_dicts(lst, index, key):
   return lst[index].get(key)

И использовать его в шаблонах:

{% access_lst list 2 "category 3" %}
0 голосов
/ 27 января 2020

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

, например.

context = {
    'category 1': 1,
    'category  2': 3,
    'category 3': 4
}
return render(request, 'polls/index.html', context)

, и вы можете получить к нему доступ в своем шаблоне следующим образом -

{for key, value in context}
<li> {{ value }} </li> 

или

<li> {{ context[key] }} </li>
...