Flask: 在 URL 中使用 URL 绑定 For?

Flask: Use URL Binding in URL For?

我的 Flask 网站上有一个表单,我想在提交时打开到某个页面,但是我想要的 link 使用 URL 绑定,但似乎效果不佳,我我会用下面的代码告诉你我的意思。

<form method="POST" action="{{ url_for('topic/<topic>') }}">

由于我在 url_for.

中使用了 URL topic/<topic>,所以出现构建错误

有办法解决这个问题吗?这样做的原因是因为每次有人在表单中输入数据时,提交时,我希望用户被重定向到同一页面 (topic/<topic>),但会额外 /1。我希望每次提交表单时数字都会增加,所以第一次提交时我希望 URL 为 topic/<topic>/1 然后第二次 topic/<topic>/2 等等。

更新 1:

我用

尝试了 Martijn Pieters 的方法
"url_for('topic', topic='sometopic')"

我还没有包括计数器。我也有

@app.route('/topic/<topic>') 

然而,当我提交表单时,url 状态为

"/topic/topic=The+Fundamental+Ideas+in+Chemistry"

。在我尝试该方法之前,它指出

"/topic/The+Fundamental+Ideas+in+Chemistry".

有没有办法从 url 中删除 'topic=' 部分,使其看起来像以前一样?

更新二:

@app.route('/topic/<topic>')
def questions(topic):
    g.db = connectDB()
    query = 'SELECT question FROM questions WHERE topic=\"' + topic + '\"'
    cur = g.db.execute(query)
    questions = [dict(question=row[0]) for row in cur.fetchall()]
    question = questions[0]['question']
    g.db.close()
    return render_template('topic.html', topic=topic, subject='chemistry', question=question)

您应该使用视图的名称,而不是它监听的URL。视图可以收听多个 URLs.

您通过以下方式注册了您的视图:

@app.route('/topic/<topic>')
def questions(topic):
    # ...

所以视图是用名称 questions 注册的。您需要使用 questions 作为 url_for() 的端点,为 <topic> URL 参数提供一个值::

url_for('questions', topic='sometopic')

如果您想传递额外的参数,您需要确保您的视图可以接受这些参数:

@app.route('/topic/<topic>')
@app.route('/topic/<topic>/<int:counter>')
def questions(topic, counter=None):
    # ...

并在构建 URL 时使用额外参数:

url_for('questions', topic='sometopic', counter=some_counter)

您还必须考虑某人每次提交表单意味着什么。您需要某种形式的持久性来存储该计数器,例如数据库或文件,或者只是一个全局变量(但不会扩展到多个进程)。