2017-06-19 15 views
-2

基本的にURLを入力することができます。 http://example.com/ "something"、何もない場合はindex.htmlをレンダリングします。何らかの理由でそれが動作していません。 反対側では、そのパラメータを渡すことができます。 http://example.com/host123を使用し、それを以下の結果関数で使用します。理想的には、私は単にexample.com/host123というURLを入力して、直接そのページに連れて行くことができます。URLのパラメータをFlaskの他の関数に渡す方法

@app.route('/<host>',methods= ['POST', 'GET']) 
    15 def index(host):  
    16   if host is None: 
    17     return render_template("index.html") 
    18   else: 
    19     return result(host) 
    20   print("test") 
    21 @app.route('/<host>',methods= ['POST', 'GET']) 
    22 def result(host): 
#some code.... 

答えて

0

あなたはあなたが(#1)ホストが定義されていない場合は、他の、index.htmlのテンプレートをレンダリングする別のテンプレートをレンダリングしようとしているようだ質問から。しかし、あなたのコードからは、ホストが定義されていれば、実際に(#2)別のエンドポイントにリダイレクトしたいと思うかもしれません。

#1を試しているなら、かなり近いです。結果関数をルートにしないで、その関数から必要なテンプレートをレンダリングして返し、ビューから返します。このような何か:

@app.route('/',methods= ['POST', 'GET']) 
@app.route('/<host>',methods= ['POST', 'GET']) 
def index(host=None):  

    if host is None: 
     return render_template('index.html') 
    else: 
     return result(host) 

def result(host): 
    ... 
    return render_template('other_template.html') 

私はまた、どのように明示的にルート二デコレータ(ドキュメントhere)とケース「ホストは何である」と示しました。

#2を実装しようとしている場合は、Flask.redirect関数を見て、目的のエンドポイント/ URLにリダイレクトします。コードでは、現在、同じ変数urlパスに対応する2つのビュー関数が表示されています。あなたのアプリはそれらを正しく解決できるように、あなたは(あなたがこのhereについての詳細を見つけることができるユニークなURLを使用する必要があり、このような何かを試してみてください:。

@app.route('/',methods= ['POST', 'GET']) 
@app.route('/<host>',methods= ['POST', 'GET']) 
def index(host):  

    if host is None: 
     return render_template('index.html') 
    else: 
     return redirect(url_for('result', host=host)) 

@app.route('/result/<host>',methods= ['POST', 'GET'])  
def result(host): 
    ... 
    return render_template('other_template.html') 

コードをテストしていないスニペットが、あなたが始める必要がある幸運を

+0

ヘルプマンに感謝します。私はそれを試みます。 – BeastlyBernardo

関連する問題