You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask提交表单报Jinja2 TemplateSyntaxError语法错误求助

问题原因

  • 直接触发报错的语法错误:Jinja2中is关键字是用来做类型/状态测试的(比如判断变量是否定义if var is defined),不能用来直接比对值相等,判断值相等要使用==;同时Jinja2的if语句结尾不需要加冒号:,你代码中{% if data[value] is "T": %}完全不符合语法规则,是触发报错的直接原因。
  • 变量未定义错误:你在results.html中使用了data变量,但server.py渲染模板时仅传入了result变量,就算语法修复后也会报变量未定义错误。
  • 键名判断语法错误:你写的{% if key is asa %}同样是is用法错误,且asa作为字符串键名需要加引号,正确写法是{% if key == 'asa' %}。
  • 结束标签语法错误:你所有的{{% endif %}}多写了一对大括号,正确格式是{% endif %}。
  • 取值逻辑错误:遍历result.items()时,key是表单字段名(比如asa/sas),value就是用户输入的答案,不需要额外用data[value]二次取值。

修复方法

第一步:修改server.py的视图函数,提前传入题目和正确答案映射

避免把答案硬编码在模板里,逻辑更清晰:

@app.route("/", methods=["GET", "POST"])
def home():
    form = QuizForm()
    if form.is_submitted():
        result = request.form
        # 定义正确答案映射,键对应表单字段名
        answer_key = {
            'asa': 'T',
            'sas': 'T',
            'aaa': 'F',
            'sss': 'T',
            'aas': 'T',
            'ssa': 'F'
        }
        # 定义题目描述映射,键对应表单字段名
        question_map = {
            'asa': 'You can prove a triangle congruent using ASA (T/F):',
            'sas': 'You can prove a triangle congruent using SAS (T/F):',
            'aaa': 'You can prove a triangle congruent using AAA (T/F):',
            'sss': 'You can prove a triangle congruent using SSS (T/F):',
            'aas': 'You can prove a triangle congruent using AAS (T/F):',
            'ssa': 'You can prove a triangle congruent using SSA (T/F):'
        }
        return render_template("results.html", result=result, answer_key=answer_key, question_map=question_map)
    return render_template("quiz.html", form=form)

第二步:替换整个results.html内容,修复所有语法和逻辑错误

{% extends "base.html" %}

{% block content %}
    <table border="1">
        <tr>
            <th>Question</th>
            <th>Correct Answer</th>
            <th>Your Answer</th>
            <th>Score</th>
        </tr>
        {% for key, user_answer in result.items() %}
            <!-- 跳过姓名字段,只处理题目 -->
            {% if key in answer_key %}
                <tr>
                    <td>{{ question_map[key] }}</td>
                    <td>{{ answer_key[key] }}</td>
                    <td>{{ user_answer }}</td>
                    <td>
                        {% if user_answer == answer_key[key] %}
                            1/1
                        {% else %}
                            0/1
                        {% endif %}
                    </td>
                </tr>
            {% endif %}
        {% endfor %}
    </table>
{% endblock %}

内容的提问来源于stack exchange,提问作者jed331

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:15:07