如何将Flask HTML表单数据传入独立py脚本并返回结果到原页面
问题修正与实现方案
核心错误梳理
- 表单配置错误:HTML表单的
action属性指向了不存在的/cityid.py路径,和你写的/city_details2路由不匹配;提交按钮的type属性写错,不存在submit1类型,应该为submit。 - cityid.py逻辑错误:
cgi模块是传统CGI程序用来获取表单参数的工具,Flask环境下根本无法通过cgi.FieldStorage()拿到请求参数,导致city变量为None;且city_details函数没有定义返回值,调用后默认返回None,后续字符串拼接就会触发你遇到的类型错误。 - 路由逻辑不完整:路由只处理了POST请求的返回,没有处理GET请求的逻辑,用户首次访问页面时会报错;且没有从Flask的
request对象中提取用户输入的城市名,直接调用city_details()拿不到参数。
分步修复代码
1. 修改HTML表单代码
把原来的表单替换成下面的内容,提交地址指向正确路由,同时添加结果展示区域:
<form name="search" action="/city_details2" method="POST"> <input type="text" name="city_input" required> <input type="submit" name="submit" value="提交"> </form> <!-- 下方用来展示返回结果 --> {% if city_result %} <div>查询结果:{{ city_result }}</div> {% endif %}
2. 重写cityid.py代码
删掉cgi相关逻辑,改为接收外部传入的城市参数,处理完成后返回结果即可:
def city_details(city): # 这里替换成你自己的城市查询逻辑,直接用传入的city变量即可 # 以下为示例逻辑 result = f"你查询的城市是:{city}" return result
3. 修正main.py的路由逻辑
补全GET、POST请求的处理逻辑,先从Flask请求对象中拿到用户输入再调用脚本:
from flask import request, render_template # 导入cityid模块中的函数 from cityid import city_details @app.route("/city_details2", methods=['GET','POST']) def city_details2(): # 首次GET访问页面时,直接渲染空表单 if request.method == "GET": return render_template("city_details2.html") # POST提交时获取参数、调用脚本、返回带结果的页面 if request.method == "POST": input_city = request.form.get("city_input") # 把用户输入的城市名传给city_details函数执行,拿到返回结果 result = city_details(input_city) # 把结果传给模板渲染展示 return render_template("city_details2.html", city_result=result)
内容的提问来源于stack exchange,提问作者B L
相关产品推荐
相关产品推荐

