2017-12-29 11 views
0

コードをもっと整備したいと考えています。今は「thing1」が3回繰り返されます。ようにする方法があります。このFlaskのエンドポイントの名前に基づいてテンプレートをレンダリングしますか?

@app.route("/thing1") 
def thing1(): 
    return render_template("thing1.ejs") 

@app.route("/thing2") 
def thing2(): 
    return render_template("thing2.ejs") 

@app.route("/thing3") 
def thing3(): 
    return render_template("thing3.ejs") 

のようなもっと...

@app.route("/thing1") 
def thing1(): 
    return render_template_name_of_function() # should render thing1 


@app.route("/thing2") 
def thing2(): 
    return render_template_name_of_function() # should render thing2 

@app.route("/thing3") 
def thing3(): 
    return render_template_name_of_function() # should render thing3 

答えて

1

あなたは現在の名前に機能を取得するために、inspectモジュールを使用することにより、機能に関する情報を読み取ろうとすることができます。そして、

import inspect 

@app.route("/thing1") 
def thing1(): 
    return render_template(inspect.stack()[0][3]) 

@app.route("/thing2") 
def thing2(): 
    return render_template(inspect.stack()[0][3]) 

@app.route("/thing3") 
def thing3(): 
    return render_template(inspect.stack()[0][3]) 

を、あなたは、このようなinspect.stack()[0][3] + '.html'

として、 inspect.stack()呼び出しの後、テンプレートファイルに拡張子を指定することができます
2

これは、それが行われるだろうかされています。

@app.route("/thing1") 
def thing1(): 
    return render() 

@app.route("/another_thing1") 
def another_thing1(): 
    return render() 

@app.route("/yet_anther_thing1") 
def yet_antoher_thing1(): 
    return render() 

def render(): 
    return render_template("thing1.ejs") 

あなたはそれが絶対に必要だと思う場合を除き、けれども、私はredirect("thing1")を使用することによって行われるべきであることを主張するだろう。

+0

ああ申し訳ありません...もっと明確にするためにeditied質問。各関数は、関数と同じ名前のテンプレートをレンダリングする必要があります – Alexis

関連する問題