Flask:在URL中使用URL绑定?

时间:2015-02-27 18:58:39

标签: python flask jinja2

我在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)

1 个答案:

答案 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)

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