【问题标题】:Flask - Creating dynamic URL based on user inputFlask - 根据用户输入创建动态 URL
【发布时间】:2022-02-11 07:08:11
【问题描述】:

我正在尝试根据来自 HTML 表单的用户输入创建动态 URL。

例如,如果用户输入“AAPL”或“KO”,则下一页应为: webapp.com/result/AAPLwebapp.com/result/KO

index.html:

<div class="cell" id="cell-1-2">
  <span class="data" style="text-align: center;">
      <form action="{{ url_for('ticker_result', variable='variable') }}" method="POST">
      <input type="text" name="variable" placeholder="search ticker or company" maxlength="4" 
             font-size="24px" style="text-transform:uppercase">
      <input class="button" type="submit" value="Search" onclick="tickerSymbol();">
    </form>
  </span>
</div>

我尝试将“变量”部分重命名为几个不同的东西,但没有任何效果,所以我只是停留在这一点上。

main.py:

# Routing to the homepage
@app.route("/")
def markert_hours_today():
    return render_template(
        "index.html")

# Routing to the result page
@app.route("/result/<variable>", methods = ["GET", "POST"])
def ticker_result(variable):
    if request.method == "POST":
        result = request.form["variable"]
        return render_template(
            "result.html", 
            result=result)

当我运行本地环境并输入股票代码时,下一个 URL 是: webapp.com/result/variable

我假设我需要编辑的是 HTML?我已经阅读了 Flask 的快速入门文档,这对我来说没有意义,并查找了类似的问题,但我似乎无法找到答案。

【问题讨论】:

    标签: python html flask


    【解决方案1】:

    你是从错误的方式来的。当 Jinja 根据您的模板创建 index.html 时,您无法知道 variable 会是什么,那么 Jinja 应该如何知道?

    您需要做的是将表单发送回相同的路径,然后将用户重定向到他们输入的任何内容。所以像这样:

    from flask import request, redirect, url_for
    
    @app.route("/", methods=['GET', 'POST'])
    def markert_hours_today():
        if request.method == 'POST':
            result = request.form['variable']
            return redirect(url_for('ticker_result', variable=result)
        return render_template("index.html")
    

    编辑:忘记将变量从 user_input 重命名为 result。

    【讨论】:

    • 感谢您的回答。我需要编辑我的 HTML 吗?
    • 移除 action 属性,表单将被发布到同一页面。
    • 好的,这就是我所拥有的:&lt;form action="#" method="POST"&gt;,当我单击转到结果页面时,它表示请求的 URL 不允许使用方法。
    • 您是否更改了“/”路由的接受方法?另请参阅我上面的评论,尝试完全删除 action 属性。显然,在发布到同一页面时不需要这样做。
    • 谢谢你。现在只需要弄清楚要为 user_input 放置什么,因为它没有定义。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 2019-11-17
    • 2013-05-16
    • 2022-11-24
    相关资源
    最近更新 更多