我在Flask网站上有一个表单,我想在提交的某个页面上打开但是我想要的链接使用的URL绑定似乎不能正常工作,我会告诉你我的内容表示以下代码。
<form method="POST" action="{{ url_for('topic/<topic>') }}">
由于我在topic/<topic>
中使用了网址url_for
,我收到了构建错误。
有办法解决这个问题吗?这样做的原因是,每次有人在表单中输入数据时,我都希望将用户重定向到同一页面(topic/<topic>
),但会额外/1
。我希望每次提交表单时都会增加该号码,以便第一次提交时我希望该网址为topic/<topic>/1
,然后是第二次topic/<topic>/2
,依此类推。
更新1:
我用
尝试了Martijn Pieters方法"url_for('topic', topic='sometopic')"
我还没有包括这个计数器。
我也有@app.route('/topic/<topic>')
然而,当我提交表格时,网址会显示
&#34; /主题/主题= +的基本思想+ + +在化学&#34;
。在我尝试该方法之前,它说明了
&#34; /主题/的基本+ + +思想在+化学&#34;
有没有办法删除&#39; topic =&#39;部分来自网址,所以它看起来像以前一样?
更新2:
@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)
答案 0 :(得分:2)
您应该使用视图的名称,而不是它侦听的网址。视图可以收听多个URL。
您注册了以下视图:
@app.route('/topic/<topic>')
def questions(topic):
# ...
所以视图使用名称questions
注册。您需要使用questions
作为url_for()
的端点,为<topic>
网址参数提供值::
url_for('questions', topic='sometopic')
如果您想传递其他参数,则需要确保您的视图可以接受这些参数:
@app.route('/topic/<topic>')
@app.route('/topic/<topic>/<int:counter>')
def questions(topic, counter=None):
# ...
并在构建网址时使用额外参数:
url_for('questions', topic='sometopic', counter=some_counter)
您还必须考虑每次提交表单对某人意味着什么。您需要某种形式的持久性来存储该计数器,如数据库或文件,或者只是一个全局变量(但不会扩展到多个进程)。