17

問題:

フォームに入力ボタンがあり、送信時に と の 2 つのパラメーターを関数 (以下にリスト) にリダイレクトする必要がありsearch_valますimore_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

あなたのルートは、複数のpast_val引数を埋める方法を指定していません。Flask は、2 つの引数のパターンを指定しない場合、2 つの引数を渡す URL を魔法のように作成することはできません。

于 2013-07-26T05:51:07.470 に答える