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)
您还必须考虑某人每次提交表单意味着什么。您需要某种形式的持久性来存储该计数器,例如数据库或文件,或者只是一个全局变量(但不会扩展到多个进程)。
我的 Flask 网站上有一个表单,我想在提交时打开到某个页面,但是我想要的 link 使用 URL 绑定,但似乎效果不佳,我我会用下面的代码告诉你我的意思。
<form method="POST" action="{{ url_for('topic/<topic>') }}">
由于我在 url_for
.
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)
您还必须考虑某人每次提交表单意味着什么。您需要某种形式的持久性来存储该计数器,例如数据库或文件,或者只是一个全局变量(但不会扩展到多个进程)。