You need to enable JavaScript to run this app. Flask中request.args.get获取表单dirname参数返回None如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Flask中request.args.get获取表单dirname参数返回None如何解决

问题原因

你当前使用<a>标签直接跳转固定地址,不会触发外层表单的GET提交逻辑,因此隐藏域中的dirname参数不会自动拼接至跳转URL中,所以Flask侧无法通过request.args获取到对应值。

解决方案(任选一种即可)

方案1:将a标签替换为表单提交按钮(最稳妥,无JS依赖)

直接把跳转用的a标签换成表单的提交元素,保留原有样式即可,修改后的HTML代码如下:

<form action="/single" method="GET">
   <input type="text" name="dirname" value="{{ dir_name }}" style="display:none">
   <!-- 用button代替a标签,继承原有样式,type设为submit触发表单提交 -->
   <button type="submit" class="btn btn-outline-white py-2 px-4" style="border:none;background:none;">More Photos</button>
</form>

提交后跳转的URL会自动变成http://127.0.0.1:5000/single?dirname=xxx的格式,Flask侧可正常接收参数。

方案2:用JS触发表单提交(保留a标签结构)

如果需要保留a标签的写法,可以添加点击事件触发表单提交,阻止默认跳转行为:

<form action="/single" method="GET" id="photoForm">
   <input type="text" name="dirname" value="{{ dir_name }}" style="display:none">
   <a href="single.html" class="btn btn-outline-white py-2 px-4" onclick="document.getElementById('photoForm').submit();return false;">More Photos</a>
</form>

方案3:直接在a标签href中拼接参数(无需表单)

如果没有其他表单参数需要提交,可以直接删掉表单,在渲染a标签时直接拼接参数,代码更简洁:

<a href="{{ url_for('single', dirname=dir_name) }}" class="btn btn-outline-white py-2 px-4">More Photos</a>

该方案使用Flask内置的url_for方法生成路由地址,会自动将参数拼接到URL中,无需手动处理编码问题。

补充优化建议

Flask侧可以增加空值判断,避免dir_name为None时路径拼接报错:

@app.route('/single.html', methods=['GET', 'POST'])
@app.route('/single', methods=['GET', 'POST'])
def single():
    dir_name = request.args.get("dirname")
    # 增加空值校验,异常时返回错误提示或者跳转其他页面
    if not dir_name:
        return "缺少dirname参数", 400
    print("Dir name is ", dir_name)
    main_path = join("static/Downloaded_images", dir_name)
    images_paths, names = get_paths(main_path)
    return render_template('single.html', images_paths_names=zip(images_paths,names))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:48:08