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

Flask开发:render_template()报TypeError,缺少必填参数求助

Flask应用报错:TypeError: render_template()缺少必填参数'template_name_or_list'

开发Flask应用时遇到如下错误,修改HTML模板后仍未解决,具体情况如下:

错误信息

TypeError: render_template() missing 1 required positional argument: 'template_name_or_list'
127.0.0.1 - - [08/Mar/2023 15:28:11] "GET / HTTP/1.1" 500 -

现有Python代码

from flask import url_for, session, Flask, request, redirect, render_template

application = Flask(__name__)
application.secret_key = "sadqwwqds"


@application.route("/")
def home():
    if "userID" in session:
        return render_template(userid=session.get("username"), login=True)
    else:
        return render_template(login=False)


@application.route("/login", methods=["get"])
def login():
    pass


@application.route("/logout")
def logout():
    pass

application.run(host="0.0.0.0")

HTML模板代码

{% if login == True%}
<meta charset="utf-8">
<h3>login success {{username}}welcome</h3>
<a href = {{ url_for("logout") }}>logout</a>
{%else %}
<form methods = "get" id="login" action={{url_for("login")}}>
    <input type ="id" id ="loginid" name="loginId" placeholder="input">
    <input type="password" id="loginPw" name="loginPw" placeholder="input">
    <button type="submit" class="login">login</button>
</form>
{%endif%}

问题分析与修复方案

核心错误原因

render_template函数的第一个参数是必填的模板文件名,你现在调用时只传了参数变量,没指定要渲染的模板(比如你的模板放在templates目录下叫index.html,就需要传入'index.html'作为第一个参数)。

修复后的代码示例

1. 修正Python代码

from flask import url_for, session, Flask, request, redirect, render_template

application = Flask(__name__)
application.secret_key = "sadqwwqds"


@application.route("/")
def home():
    if "username" in session:  # 统一session键名,避免判断和取值不一致
        return render_template('index.html', username=session.get("username"), login=True)
    else:
        return render_template('index.html', login=False)


@application.route("/login", methods=["GET"])
def login():
    # 补充登录逻辑:获取表单参数并写入session
    login_id = request.args.get("loginId")
    login_pw = request.args.get("loginPw")
    # 这里可添加账号密码验证逻辑,示例直接写入session
    session["username"] = login_id
    return redirect("/")


@application.route("/logout")
def logout():
    # 补充登出逻辑:清除session中的用户信息
    session.pop("username", None)
    return redirect("/")

application.run(host="0.0.0.0")

2. 修正HTML模板代码

{% if login %}
<meta charset="utf-8">
<h3>登录成功,{{username}} 欢迎你</h3>
<a href="{{ url_for('logout') }}">退出登录</a>
{% else %}
<form method="GET" id="login" action="{{ url_for('login') }}">
    <input type="text" id="loginid" name="loginId" placeholder="请输入账号">
    <input type="password" id="loginPw" name="loginPw" placeholder="请输入密码">
    <button type="submit" class="login">登录</button>
</form>
{% endif %}

其他细节修正说明

  • 模板变量名统一:原代码中传的是userid,但模板里用的是username,已修正为一致
  • HTML表单属性修正:methods改为单数method,type="id"改为type="text"(没有id类型的输入框)
  • 模板语法优化:login == True可简化为login,链接和表单action的变量用引号包裹,避免语法问题
  • 补充了login和logout的基础逻辑,保证功能完整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:57:09