Конкатенация тегов для динамического отображения словарей - PullRequest
1 голос
/ 27 января 2020

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

{% for a in applications %}
{{ dict_.a.id}}
{% endfor %}

с точки зрения:

context = {
    'applications': applications,
    'dict_': count_dict
}

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

Нужно ли мне это согласовать? Например,

{{ dict_ }} + {{ a.id }}

Обновление. Вот мой взгляд:

def MapView(request):
    applications = Application.objects.values(
        'name', 'id', 'icon_name').filter(organization_id=1).order_by('name')

    context = {
        'applications': applications,
        'devices_count': [(a, devices.filter(id=a['id']).count()) for a in applications]
    }

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

1 Ответ

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

Django шаблоны сознательно ограничены, чтобы было неудобно выполнять поиск по словарю подобным образом или делать вызовы функций (с параметрами). Причина в том, что бизнес-логика c лучше записывается в представлении , а не в шаблоне.

Например, вы можете создать отображение в представлении, например:

context = {
    <b>'app_counts': [(a, count_dict[a.id]) for a in applications]</b>
}

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

тогда вы можете сделать это с помощью:

{% for <b>app, count</b> in <b>app_counts</b> %}
    {{ app }}: {{ count }}
{% endfor %}
...