Flask 模板中 if 语句语法错误的修复方法
发表时间:2026-01-14 00:00:00
文章作者:碧海醫心
浏览次数:
flask 的 jinja2 模板语法中,`{% if ... %}` 标签末尾**不能加冒号(:)**,否则会导致模板渲染失败;正确写法是省略冒号,仅用 `{% if condition %}` 开始条件块。
在你提供的代码中,HTML 模板里的条件判断写成了:
{% if username == "Ana de Armas": %}这行代码存在语法错误:Jinja2 不接受 if 标签后跟冒号(:),该符号是 Python 代码中的语法,而 Jinja2 模板标签使用 {% ... %} 包裹,其内部是类 Python 表达式,但标签本身不遵循 Python 缩进或冒号规则。
✅ 正确写法应为:
{% if username == "Ana de Armas" %}
Hello my love
{% else %}
Hello {{ username }}
{% endif %}注意:
- {% if ... %} 和 {% endif %} 均无冒号;
- {{ username }} 插值语法保持不变,用于安全渲染变量;
- 条件支持 ==、!=、is defined、is none 等常用判断,也支持链式逻辑(如 and/or/not)。
此外,你的 Flask 启动代码中存在一个潜在问题:
if __name__ == '__main__':
hello_world() # ❌ 错误:这不是启动服务器的正确方式这行代码会直接调用视图函数,但并未运行 Flask 开发服务器,导致路由不可访问。应改为:
if __name__ == '__main__':
app.run(debug=True) # ✅ 正确:启动本地开发服务器完整修正后的 Flask 文件示例:
from flask import Flask, render_template app = Flask(__name__, template_folder="template") @app.route("/") @app.route("/index") def hello_world(): name = "Ana de Armas" return render_template('index.html', title='wekcine', username=name) if __name__ == '__main__': app.run(debug=True)
? 小结:
- Jinja2 模板中所有 {% ... %} 标签(如 if、for、block)结尾都不加冒号;
- 冒号仅出现在 Python 脚本中(如 if x == y:),切勿混淆;
- 启动 Flask 应用务必调用 app.run(),而非直接执行视图函数;
- 开启 debug=True 可获得更友好的错误提示,便于快速定位模板语法问题。










