Диктофон Django, значение в цикле for не работает - PullRequest
0 голосов
/ 29 декабря 2018

Я немного застрял в проблеме с Django, когда не могу получить доступ к значениям dict в цикле for.Он работает вне цикла for, но не внутри.

Я упускаю очевидное здесь?

Python:

err{}
err['else'] = {'class': 'Low', 'txt': 'zero'}
err['if'] = {'class': 'High', 'txt': 'one'}
data = { 'errors': err }
return render(request, 'index/error.html', data)

Шаблон HTML:

<p>{{ errors }}</p>
<p>{{ errors.if }}</p>
<p>{{ errors.if.class }}</p>

{% for error in errors %}
  <div class="{{ error.class }}"><p>{{ error.txt }}</p></div>
{% endfor %}

Верхние 3 строки предназначены для отладки кода и работают просто отлично.Цикл for не создает никакого кода.

С уважением, LVX

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

Вы должны попробовать вот так - ошибка ['class']

Второй способ - ошибка [ключ] ['class']

Использовать forloop - для k, v в ошибках: print(v [ 'класс'])

0 голосов
/ 29 декабря 2018

Ответа Ральфа достаточно для вопроса, я просто хочу добавить здесь дополнительную информацию.

Когда система шаблонов встречает точку в имени переменной, она пытается выполнить следующие поиски, в следующем порядке:

  1. Поиск по словарю (например, foo ['bar'])
  2. Поиск атрибутов (например, foo.bar)
  3. Вызов метода (Например: foo.bar ())
  4. Поиск по индексу списка (например: foo [2])

Система использует первый тип поиска, который работает.

0 голосов
/ 29 декабря 2018

Вам, вероятно, необходим доступ к .items() из dict, который вы назвали errors.Простая итерация по dict дает вам ключи, но не значения.

Вы можете изменить свой код на:

{% for k, v in errors.items %}
  <div class="{{ v.class }}"><p>{{ v.txt }}</p></div>
{% endfor %}

Конечно, если вы этого не сделаетевам нужны ключи (if и else), тогда вы также можете использовать .values() вместо items(), чтобы просто получить значения внутри dict.

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