Flask 模板中 if 语句语法错误的修复方法

11次阅读

Flask 模板中 if 语句语法错误的修复方法

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 可获得更友好的错误提示,便于快速定位模板语法问题。

text=ZqhQzanResources