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

如何在Flask中获取HTML下拉菜单值以实现动态翻译目标语言?

解决你的下拉菜单目标语言传递问题

看起来你遇到了两个核心问题,导致无法正确获取用户选择的目标语言:

1. 错误使用GET参数方式获取POST表单值

你的表单明确用POST方法提交,但代码里却用request.args['lang_target']来拿参数——request.args是专门读取URL里的GET查询参数的,POST表单的参数都存在request.form对象里。

另外,直接用方括号硬取参数如果用户没选语言会抛出KeyError,建议用.get()方法更安全,还能设置默认值兜底:

# 替换原来的target赋值行
target = request.form.get('lang_target', 'en')  # 第二个参数是默认语言,比如默认英文

如果要严格校验用户必须选择语言,可以加个判断:

target = request.form.get('lang_target')
if not target:
    flash("请选择目标语言")
    return redirect(url_for('selectImage'))

2. HTML下拉菜单的选项值设置错误

你的HTML里所有<option>的value都固定写死成了1,这意味着不管用户选哪个语言,提交的都是1,完全不是你需要的语言代码(比如fr、es这类)。你应该把value设置为循环里的语言代码x:

<select name="lang_target">
    {% for code, name in language_target.items() %}
    <option value="{{ code }}"> {{ name }}</option>
    {% endfor %}
</select>

这里我把循环改成了.items(),直接同时拿到语言代码和名称,比原来通过键取值的写法更清晰直观。

修改后的关键代码片段

Python部分(getfileHelper函数)

@app.route('/getfileHelper', methods=['GET','POST'])
def getfileHelper():
    if request.method == 'POST':
        file = request.files['imgfile']
        filename = secure_filename(file.filename)
        if file.filename == '':
            flash("No file selected. Please select an image file")
            return render_template('selectImage.html')
        texts = detect_text('static/images/'+filename)
        text_translations = []
        
        # 正确获取POST表单中的目标语言
        target = request.form.get('lang_target')
        if not target:
            flash("Please select a target language")
            return redirect(url_for('selectImage'))
            
        for text in texts:
            translate_client = translate.Client()
            translate_text = text.description
            source = 'en'
            # 使用获取到的target参数调用翻译API
            translation = translate_client.translate(translate_text, source_language=source, target_language=target)
            text_translations.append({'text':translate_text, 'translation':translation['translatedText']})
            db_append(filename, translate_text, translation['translatedText'])
        return render_template('home.html', filename=filename, text_translations=text_translations)

HTML部分(下拉菜单)

<select name="lang_target">
    {% for code, name in language_target.items() %}
    <option value="{{ code }}"> {{ name }}</option>
    {% endfor %}
</select>

这样修改后,就能正确获取用户选择的目标语言并传入翻译API了。

内容的提问来源于stack exchange,提问作者Aiden Richards

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:57