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
相关产品推荐
相关产品推荐

