将表单放入URL的Flask

2024-09-29 23:14:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究一个表单,它将数据发送到scraper,同时从表单输入生成URL。返回的模板工作得很完美,但是URL的更改最终给了我URL中的整个表单,我不知道为什么。在

URL的结果如下:

http://localhost/options/%3Cinput%20id%3D%22symbol%22%20name%3D%22symbol%22%20type%3D%22text%22%20value%3D%22%22%3E

我希望它看起来像这样:

^{pr2}$

窗体类:

class OptionsForm(Form):
    symbol = StringField('Enter a ticker symbol:', validators=[Required(), Length(min=1, max=5)])
    submit = SubmitField('Get Options Quotes')

观点:

# Where the form data ends up
@app.route('/options/<symbol>', methods=['GET', 'POST'])
def options(symbol):
# Created this try/except so I could test functionality - for example, I can do 'localhost/options/ABC' and it works
    try:
        symbol = request.form['symbol']
    except:
        pass
    return render_template('options.html', symbol=symbol, company_data=OS.pull_data(symbol, name=True))

# Where the form lives
@app.route('/', methods=['GET', 'POST'])
def index():
    form = OptionsForm()
    print(form.errors)
    if form.validate_on_submit():
        return redirect(url_for('options', symbol=form.symbol.data))
    return render_template('index.html', options_form=form)

模板:

<div id="options_div">
<form method="POST" name="symbol_form" action="{{ url_for('options', symbol=options_form.symbol) }}">
    {{ options_form.hidden_tag() }}
    {{ options_form.symbol(size=10) }}
    {{ options_form.submit(size=10) }}
</form>

任何帮助都将不胜感激。在


Tags: theform模板localhosturl表单fordata
1条回答
网友
1楼 · 发布于 2024-09-29 23:14:51

尝试将enctype='multipart/form-data'添加到表单标记中。您的表单似乎正在使用application/x-www-form-urlencoded,这是默认值。在

编辑好的,看看这个。当呈现模板时,该数据属性(在调用的url_中)中没有值。当不引用data属性时(如您最初的问题所示),您引用的是实际的form元素(这就是为什么您看到在url中传递的所有html)。以下是你的选择(我看到):

  1. 使用某种前端javascript将表单的action属性绑定到输入框中的值。像angular这样的东西会有帮助(但是如果你不使用它的任何其他特性的话,那就太过分了)。

  2. 只需要表单POST to/options(url中没有符号)。然后,从表单数据中获取symbol属性。

相关问题 更多 >

    热门问题