17

问题:

我在表单中有一个输入按钮,当它提交时应该将两个参数search_val和重定向i到一个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 
                               )

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

我试过的:

在 jinja2 模板中创建指向 Flask 应用程序 url 的链接

通过 url_for() 使用多个参数

在 Flask 中使用变量和 url_for 构建错误

类似的构建错误

作为旁注,该函数的目的是在有人点击“下一页”按钮时遍历列表。我正在传递变量i,所以我可以有一个参考来不断增加列表。有没有更好的烧瓶/神社 2 方法?我已经查看了cycling_list 功能,但它似乎无法用于呈现页面,然后使用cycling_list.next().

4

2 回答 2

38

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

@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
于 2013-07-26T07:03:14.203 回答
9

Your route doesn't specify how to fill in more than just the one past_val arg. Flask can't magically create a URL that will pass two arguments if you don't give it a two-argument pattern.

于 2013-07-26T05:51:07.470 回答