Django: Невозможно сослаться на имя поля в шаблоне, который содержит точку - PullRequest
0 голосов
/ 23 марта 2020

Объект, который я передаю из представления в шаблон, имеет несколько полей, которые динамически увеличиваются и выделяются

например, объект выглядит так:

row = {
 'id':id,
 'input.object1':obj1
 'input.object2':obj2
}

Я пытаюсь получить доступ к значению «input.object1» как «{{row.input.object1}}» в шаблоне. но страница не показывает ничего для этого поля (та же проблема для "input.object2". Но "row.id" работает нормально)

{% for row in row_list %}
    <tr>
        <td>{{ row.id }}</td>
        <td>{{ row.input.object1 }}</td>
        <td>{{ row.input.object2 }}</td>
    </tr>
{% endfor %}

Есть ли доступ к этим значениям в html? Заранее спасибо:)

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы можете попробовать следующую структуру вашего контекста:

row = {
 'id': id,
 'input': {'object1': obj1, 'object2': obj2}
}

, которая позволит вам получить доступ к значениям так, как вы пытаетесь использовать их в своем шаблоне. Но если эта структура является динамической c и переменной длины, вам лучше использовать список:

row = {
 'id': id,
 'input': [obj for obj in ....]
}

и в шаблоне

{% for row in row_list %}
    <tr>
        <td>{{ row.id }}</td>
        {% for obj in row.input %}
            <td>{{ obj }}</td>
        {% endfor %}
    </tr>
{% endfor %}
1 голос
/ 23 марта 2020
Языки шаблонов

Django используют точки в именах переменных для обозначения поиска по индексу (lists et c), ключу (dict-like) или атрибуту (что-либо еще), поэтому для {{ row.input.object1 }} сначала он пытается разрешить row.input как row["input"] или row.input - ничего из этого не существует.

Вы хотите сделать input либо списком, либо диктом, ie:

row = {
 'id':id,
 'input'= [obj1, obj2]
}

а затем

{{ row.input.0 }} - {{ row.input.1 }}

или

row = {
   'id':id,
   'input'= {"object1": obj1, "object2": obj2}
 }

, а затем

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