首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使python flask变量对html模板文件中的另一个if块可见,因为" with“语句范围以if块结尾

无法使python flask变量对html模板文件中的另一个if块可见,因为" with“语句范围以if块结尾
EN

Stack Overflow用户
提问于 2019-06-18 20:44:24
回答 1查看 348关注 0票数 0

Python Flask:无法使python flask变量对html模板文件中的另一个if块可见,因为" with“语句范围以if块结尾。尝试将if块放在for循环的上方,但它不起作用。

key:value列表类似于:"{ subject : Maths,UnitTest1-Score: 90,UnitTest2-Score: 95,UnitTest2-Score: 98 }“希望将subject_name变量传递给第二个if语句"if key == 'UnitTest3'”,表示有兴趣引用相应的主题,然后更新数据库中的标记。由于变量是在第一个if语句"if key == 'Subject‘%}“中定义的(使用'with’语句)。尝试了不同的方法,但是上下文在第一个if块之后没有向前移动。尝试在第4行"if key”之后添加"with subject_name='‘“,以便它可以在第二行if "if key == 'Subject'”中可见,但是它会给出错误,如果在第二行if“if key == 'Subject'”使用,则主题是未定义的。我相信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 %}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-19 05:25:31

你正在尝试用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“在软件中有一个特殊的含义,你应该避免使用这个术语来指代其他任何东西,因为它会给下一个继承你代码的人增加混淆。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56649487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档