Вы пытаетесь делать вещи в Jinja, которые намного лучше подходят для Python. Кроме того, вы, кажется, переходите в один словарь с двумя различными типами объектов. Это сбивает с толку и не нужно.
Вы должны полностью обработать и подготовить ваши данные на python, а затем передать соответствующие объекты / словари в Jinja для отображения. Хорошее практическое правило заключается в том, что вы должны избегать вызовов базы данных из Jinja. Позаботьтесь об этом в методе просмотра Flask.
Я бы также отметил, что пары key
/ value
выйдут из i
в непредсказуемом порядке. И что у вас не может быть элемента словаря с None
в качестве значения ключа, поэтому проверку {% if key %}
можно удалить.
Как только вы правильно структурируете свои данные, вы сможете сделать что-то вроде этого:
render_template('subjects.html', subjects=all_subjects, marks=all_marks)
{% block content %}
{% for s in subjects %}
<article>
<div class="subject">
<a href="#" >{{ subject.name }}</a>
</div>
</article>
{% endfor %}
{% for m in marks %}
<article>
<div>
<form action="" method='POST'>
<label for="total_marks">Marks</label>
<input type="number" id="total_marks" min="0" value="{{ m.value }}" oninput="this.value = Math.abs(this.value)">
<button type="submit">Update</button>
</form>
</div>
</article>
{% endfor %}
{% endblock content %}
Последнее: « unit test » имеет особое значение в программном обеспечении, и вам следует избегать использования этого термина для обозначения чего-либо еще, поскольку это добавит путаницу для следующего человека, который унаследует ваш код.