English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Template Flask

Flask può restituire l'output di una funzione associata a un URL in forma HTML. Ad esempio, nella seguente script, la funzione hello() viene presentata con il tag <h1> aggiuntivo ‘Hello World’

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

Ma generare HTML dal codice Python è molto complicato, specialmente quando è necessario inserire dati variabili e elementi del linguaggio Python (come condizioni o cicli). Spesso è necessario escapare il codice HTML.

Può utilizzare la tecnologia del motore di template Jinja2 senza dover restituire HTML codificato in modo硬编码 dalla funzione. Come mostrato nel codice seguente, è possibile rendere il file HTML tramite la funzione render_template().

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask
 app = Flask(__name__)
 @app.route('/')
 def index():
    return render_template('hello.html')
 if __name__ == '__main__':
    app.run(debug = True)

Flask cercherà nel percorso della cartella dello script il file HTML nella cartella templates. La struttura della directory dell'applicazione che utilizza i modelli è come segue -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
app.py
 hello.py
     templates
         hello.html
         register.html
         ....

Il termine 'sistema di template web' si riferisce a progettare uno script HTML in cui possono essere inseriti dati variabili. Un sistema di template web è composto da un motore di template, una fonte di dati e un processore di template.

Flask utilizza il motore di template Jinga2. I modelli web contengono placeholder di sintassi HTML per variabili ed espressioni (in questo caso espressioni Python), che vengono sostituite con i valori durante la presentazione del modello.

Il seguente codice è salvato nel modello( templates) nel seguente percorso di cartella: hello.html

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Elaborazione delle richieste HTTP Flask</title>
 </head>
    <body>
       <h1>Hello {{ name }}!</h1>
    </body>
 </html>

Quindi, salva il seguente codice in app.pyEsegui il file da shell Python -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

Quando il server di sviluppo inizia a eseguire, apri il browser e inserisci l'URL - http://localhost:5000/hello/maxsu

La parte variabile dell'URL viene inserita nel segnaposto {{name}}.

Il motore di modello Jinja2 utilizza i seguenti delimitatori per evitare di interpretare HTML.

{% ... %} Usato per istruzioni su più righe {{ ... }} Usato per stampare espressioni nell'output del modello {# ... #} Usato per commenti non inclusi nell'output del modello # ... ## Usato per istruzioni su una singola riga

Nel seguente esempio, viene dimostrato l'uso di istruzioni condizionali nel modello. La regola dell'URL della funzione hello() accetta un parametro intero. Questo parametro viene passato al modello hello.html. All'interno di esso, il valore del numero (punteggio) ricevuto viene confrontato (maggiore o minore di 50), quindi viene eseguita la rendering condizionale dell'output HTML.

Script Python come segue -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
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)

File modello: hello.html Lo script del modello HTML è il seguente -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Esempio di template Flask</title>
 </head>
    <body>
       {% if marks>50 %}
       <h1>Sei passato!</h1>
       {% else %}
       <h1>Non hai superato l'esame!</h1>
       {% endif %}
    </body>
 </html>

Attenzione, le istruzioni condizionali if-else e endif sono incluse nei delimitatori {%..。%}.

Esegui lo script Python e accedi all'URL => http://localhost/hello/60 e poi a http://localhost/hello/59 per visualizzare l'output HTML condizionale.

La struttura di ciclo Python può essere utilizzata anche all'interno del modello. Nel seguente script, quando si apre l'URL => http://localhost:5000/result nel browser, la funzione result() invia l'oggetto dizionario a file modello: results.html

result.html La parte del modello utilizza un ciclo for per visualizzare le coppie di chiave e valore dell'oggetto dizionario result{} come celle della tabella HTML.

Esegui il seguente codice nel shell di Python.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
from flask import Flask, render_template
 app = Flask(__name__)
 @app.route('/result')
 def result():
     dict = {'phy':59,'che':60,'maths':90}
     return render_template('result.html', result = dict)
 if __name__ == '__main__':
     app.run(debug = True)

Salva lo script HTML seguente nella cartella dei modelli ( templates) del file di template: result.html

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : it.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Esempio di template Flask</title>
 </head>
    <body>
       <table border = 1>
          {% for key, value in result.items() %}
             <tr>
                <th> {{ key }} </th>
                <td> {{ value }} </td>
             </tr>
          {% endfor %}
       </table>
    </body>
 </html>

Qui, la dichiarazione Python corrispondente al ciclo for è inclusa tra {%...%}, mentre le chiavi e i valori delle espressioni sono messi tra {{}}.

Dopo aver iniziato la sviluppo e l'esecuzione, aprire http://localhost:5000/result nel browser per ottenere il seguente output.