from flask import Flask app = Flask(__name__) @app.route('/') def index(): return '<html><body><h1>'Hello World'</h1></body></html>' if __name__ == '__main__': app.run(debug = True)Tuttavia, la generazione di contenuti HTML dal codice Python è complicata, specialmente quando è necessario inserire dati variabili e elementi di linguaggio Python come condizionali o loop. Ciò richiederebbe frequenti fughe dall'HTML.
È qui che è possibile sfruttare il motore di template Jinja2 , su cui è basato Flask. Invece di restituire codice HTML hardcode dalla funzione, un file HTML può essere reso dalla funzione render_template () .
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return render_template(‘hello.html’) if __name__ == '__main__': app.run(debug = True)Flask proverà a trovare il file HTML nella cartella dei modelli, nella stessa cartella in cui è presente questo script.
- Cartella dell'applicazione
- Hello.py
- modelli
- hello.html
Flask utilizza il motore di template jinga2 . Un modello Web contiene segnaposto intervallati della sintassi HTML per variabili ed espressioni (in questo caso espressioni Python) che vengono sostituiti quando viene eseguito il rendering del modello.
Il seguente codice viene salvato come ciao.html nella cartella dei modelli.
<!doctype html> <html> <body> <h1>Hello {{ name }}!</h1> </body> </html>Successivamente, esegui il seguente script dalla shell Python.
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/<user>') def hello_name(user): return render_template('hello.html', name = user) if __name__ == '__main__': app.run(debug = True)All'avvio del server di sviluppo, aprire il browser e inserire l'URL come - http: // localhost: 5000 / hello / mvl
La parte variabile dell'URL è inserita in {{name}} segnaposto.
Il motore di template Jinga2 utilizza i seguenti delimitatori per l'escape dall'HTML.
- {% ...%} per le dichiarazioni
- {{...}} per le espressioni da stampare sull'output del modello
- {# ... #} per i commenti non inclusi nell'output del modello
- # ... ## per Line Statement
Lo script Python è il seguente -
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/<int:score>') def hello_name(score): return render_template('hello.html', marks = score) if __name__ == '__main__': app.run(debug = True)Lo script del modello HTML di hello.html è il seguente:
<!doctype html> <html> <body> {% if marks>50 %} <h1> Your result is pass!</h1> {% else %} <h1>Your result is fail</h1> {% endif %} </body> </html>Si noti che le istruzioni condizionali if-else e endif sono racchiuse nel delimitatore {% ..%} .
Esegui lo script Python e visita l'URL http: // localhost / hello / 60 e poi http: // localhost / hello / 30 per vedere l'output di HTML che cambia condizionatamente.
I costrutti di loop Python possono anche essere utilizzati all'interno del modello. Nel seguente script, la funzione result () invia un oggetto dizionario al modello results.html quando URL http: // localhost: 5000 / result viene aperto nel browser.
La parte Template di result.html utilizza un ciclo for per il rendering di coppie chiave e valore di oggetto dizionario risultato {} come celle di una tabella HTML.
Esegui il seguente codice dalla shell Python.
from flask import Flask, render_template app = Flask(__name__) @app.route('/result') def result(): dict = {'phy':50,'che':60,'maths':70} return render_template('result.html', result = dict) if __name__ == '__main__': app.run(debug = True)Salva il seguente script HTML come risultato.html nella cartella dei modelli.
<!doctype html> <html> <body> <table border = 1> {% for key, value in result.iteritems() %} <tr> <th> {{ key }} </th> <td> {{ value }} </td> </tr> {% endfor %} </table> </body> </html>Qui, ancora una volta le istruzioni Python corrispondenti al ciclo For sono racchiuse in {% ..%} mentre la chiave e il valore delle espressioni sono inseriti in {{}} .
Dopo aver avviato lo sviluppo, apri http: // localhost: 5000 / risultato nel browser per ottenere il seguente output.
No comments:
Post a Comment