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

如何在Flask中接收并渲染HTML中的多单词变量字符串?

解决Flask路由接收含空格产品名参数的问题

首先得说,你现在遇到两个核心问题:请求方法不匹配,以及URL参数的编码/匹配问题,咱们一个个解决:

1. 修正请求方法不匹配的问题

你的<a>标签点击后发起的是GET请求,但路由却只允许POST方法,这直接导致请求根本进不了reg2函数。如果只是跳转查看产品相关内容,用GET更合理,把路由改成:

@app.route('/templates/<k>', methods=["GET"])
def reg2(k):
    print(k)
    # 这里添加你的渲染逻辑,比如返回对应模板
    return render_template('product_detail.html', product=k)

如果确实需要用POST(比如提交操作),那不能用<a>标签,得改成表单+按钮的形式:

<form action="{{ url_for('reg2', k=k) }}" method="POST">
    <button type="submit" class="btn btn-primary">提交</button>
</form>

2. 正确生成含空格的URL参数

你直接拼接/templates/{{k}}会有问题:当k是多单词的产品名(比如"Wireless Headphones"),生成的URL会带空格,浏览器会自动把空格编码成%20,但手动拼接容易出现解析错误。最好用Flask自带的url_for函数来生成URL,它会自动处理参数的URL编码:

{% for k,v in titlef.items() %}
<tr>
    <td>{{ k }}</td>
    <td>{{ v }}</td>
    <td>
        <a class="btn btn-primary" href="{{ url_for('reg2', k=k) }}">查看详情</a>
    </td>
</tr>
{% endfor %}

这样生成的URL会是/templates/Wireless%20Headphones,浏览器能正确识别,Flask也会自动把%20解码回空格,你在reg2函数里打印的k就是完整的带空格的产品名。

3. 确保路由能正确匹配参数

默认情况下,Flask的<k>使用的是string转换器,它可以匹配除了/之外的所有字符(包括解码后的空格),所以你的路由写法其实没问题,但如果遇到更复杂的特殊字符(比如&、?),也可以明确指定转换器:

@app.route('/templates/<string:k>', methods=["GET"])
def reg2(k):
    print(k)
    return render_template('product_detail.html', product_name=k)

这样调整后,就能正确接收并渲染带空格的产品名参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:00:38