2017-12-29 3 views
0

Ich möchte den Code wartbarer machen. Gerade jetzt wird "ding1" dreimal wiederholt. Gibt es eine Möglichkeit, dieseRender Vorlage basierend auf dem Namen des Endpunkts in 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") 

Ähnliche ... machen

@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 

Antwort

1

Sie können versuchen, Funktion Infos zu lesen, indem inspect-Modul, das zur Zeit Funktionsnamen zu erhalten:

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]) 

Dann können Sie eine Erweiterung Vorlagendatei angeben, nach dem inspect.stack() Aufruf, wie inspect.stack()[0][3] + '.html'

2

Dies wird, wie es erfolgen würde.

@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") 

Obwohl, es sei denn, Sie denken, es unbedingt notwendig ist, dass ich es sollte redirect("thing1") unter Verwendung getan argumentieren würde werden.

+0

Ahh sorry ... edited Frage, um es klarer zu machen. Jede Funktion muss eine Vorlage wiedergeben, die den gleichen Namen wie die Funktion hat – Alexis

Verwandte Themen