带有多个参数的Flask url_for()

时间:2013-07-26 05:46:52

标签: python html flask

问题:

我在表单中有一个输入按钮,当它提交时应将两个参数search_vali重定向到more_results()函数(下面列出),但我得到了wsgi构建时的类型错误。

错误是:TypeError: more_results() takes exactly 2 arguments (1 given)

HTML:

 <form action="{{ url_for('more_results', past_val=search_val, ind=i ) }}" method=post>
    <input id='next_hutch' type=submit value="Get the next Hunch!" name='action'>
 </form>

烧瓶功能:

@app.route('/results/more_<past_val>_hunches', methods=['POST'])
def more_results(past_val, ind):

    if request.form["action"] == "Get the next Hunch!":
        ind += 1 
        queried_resturants = hf.find_lunch(past_val) #method to generate a list
        queried_resturants = queried_resturants[ind]
        return render_template(
                               'show_entries.html', 
                                queried_resturants=queried_resturants, 
                                search_val=past_val,
                                i=ind 
                               )

有关如何克服构建错误的任何想法?

我尝试了什么:

Creating link to an url of Flask app in jinja2 template

使用url_for()

的多个参数

Build error with variables and url_for in Flask

类似构建错误

作为旁注,该功能的目的是当有人点击“下一页”按钮时遍历列表。我正在传递变量i,所以我可以引用继续递增列表。是否有更好的烧瓶/ jinja 2方法?我查看了cycling_list功能,但它似乎无法用于呈现页面,然后使用cycling_list.next()重新呈现它。

2 个答案:

答案 0 :(得分:32)

通过为某些参数指定默认值,也可以创建支持可变数量参数的路由:

@app.route('/foo/<int:a>')
@app.route('/foo/<int:a>/<int:b>')
@app.route('/foo/<int:a>/<int:b>/<int:c>')
def test(a, b=None, c=None):
   pass

答案 1 :(得分:8)

您的路线未指定如何填写的不只是一个past_val arg。如果你不给它两个参数模式,Flask就不能神奇地创建一个会传递两个参数的URL。