Python Flask:在html模板文件中,如果“ with”语句作用域以if块结尾,则无法使python flask变量对另一个if块可见。试图将if块放置在for循环上方,但不会占用。
键:值列表具有以下内容: “ {主题:数学,UnitTest1-得分:90,UnitTest2-得分:95,UnitTest2-得分:98}” 想要将subject_name变量传递给第二个if语句 “如果键=='UnitTest3'” 有兴趣参考相应主题,然后更新数据库中的标记。由于变量是在第一个if语句“ if key =='Subject'%}中定义的(使用'with'语句)。尝试了不同的方式,但是上下文在第一个if块之后并没有前进。 试图在第四行“ if key”之后添加“ with subject_name =“”,以便如果“ if key =='Subject'”在第二行中可见,但是如果第二秒使用if,则会出现错误的主题名称“如果键=='主题'” 我相信jinja2支持这一点。任何帮助表示赞赏。
{% block content %}
{% for i in all_subjects %}
<article>
{%for key, value in i.items() %}
{% if key %}
{% if key == 'Subject' %}
{% with subject_name = value %}
{% with subject = subject_db.find_one({'subject_name': subject_name}) %}
{% if subject %}
<div>
<a href="#" >{{subject['subject_name']}}</a>
</div>
{% endif %}
{% endwith %}
{% endwith %}
{% endif %}
{% if key == 'UnitTest3' %}
{% with marks = value %}
<form action="" method='POST'>
<div>
<label> Marks: <input type="number" name="total_marks" min="0" value=0 oninput="this.value = Math.abs(this.value)"> </label>
<button type="submit">Update</button>
</div>
</form>
{% endwith %}
{% endif %}
{% endif %}
{% endfor %}
</article>
{% endfor %}
{% endblock content %}
答案 0 :(得分:0)
您正在尝试在Jinja中做更适合python的事情。另外,您似乎正在传递包含2种不同对象的单个字典。这是令人困惑和不必要的。
您应该完全使用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”在软件中具有特殊含义,您应避免使用该术语来指代其他任何内容,因为这会使下一个继承您代码的人感到困惑。