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

如何将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:54:04