Вложенный цикл для доступа к словарю Django HTML - PullRequest
0 голосов
/ 25 июня 2019

У меня есть список заголовков столбцов, например:

ColumnName = ['Latitude', 'Longitude', 'Depth']

и словарь с таким форматом:

MyDict = [{'Latitude': '75',
           'Longitude': '37',
           'Depth': 6.0},
          {'Latitude': '23',
           'Longitude': '97',
           'Depth': 2.3},
          {'Latitude': '55',
           'Longitude': '14',
           'Depth': 1.9}]

Я хочу создать динамическую таблицу с этими данными и получить доступ кзначение словаря по его ключу из списка.И я пробовал с этим кодом в моем HTML Django, но он не работает

<table>
<thead>
    <tr>
        {% for ColName in ColumnName %}
            <th> ColName <th>
        {% endfor %}
    <tr>
</thead>
<tbody>
        {% for i in MyDict %}
            <tr>
            {% for x in ColumnName %}
                <td>
                     {{i.x}}
                </td>
            {% endfor %}
            </tr>
        {% endfor %}
</tbody>
</table>

Если я получаю доступ с

{{i.Latitude}}

, это работает, но если я получаю доступ к этим данным с помощью {{ix}} это не работает

Ответы [ 2 ]

1 голос
/ 25 июня 2019

Самое простое решение - использовать список (latitude, longitude, depth) кортежей вместо списка диктов.В вашем представлении

def myview(request):
    the_dicts = get_the_dicts()
    # pep 08: variables should be all_lower + use plural for collections
    columns = ['Latitude', 'Longitude', 'Depth'] 
    data = [tuple(d[name] for name in column_names]) for d in the_dicts]
    return render(request, "yourtemplate.html", {"columns": columns, "data":data})

и в вашем шаблоне:

<table>
<thead>
    <tr>
        {% for colname in columns %}
            <th> colname <th>
        {% endfor %}
    <tr>
</thead>
<tbody>
        {% for row in data %}
            <tr>
            {% for value in row %}
                <td>{{value}}</td>
            {% endfor %}
            </tr>
        {% endfor %}
</tbody>
</table>

Альтернатива (если вы действительно хотите использовать вместо этого список диктов) требует написания пользовательского фильтра шаблона или тега шаблонаэто может делать динамический поиск по диктовке, но это более сложно и, вероятно, намного медленнее (3 тега или фильтрация вызовов на диктат в вашем списке == значительные накладные расходы).

0 голосов
/ 25 июня 2019

вы можете попробовать что-то вроде

{% for key, values in myDict.items %}
...