Maison > développement back-end > Tutoriel Python > Qu'est-ce que Jinja2 en python ? Comment utiliser ?

Qu'est-ce que Jinja2 en python ? Comment utiliser ?

不言
Libérer: 2018-10-25 15:54:30
avant
13328 Les gens l'ont consulté

Le contenu de cet article porte sur qu'est-ce que Jinja2 en python ? Comment utiliser ? , a une certaine valeur de référence, les amis dans le besoin peuvent s'y référer, j'espère que cela vous sera utile.

Qu'est-ce que Jinja2 ? Sa syntaxe et son ensemble de fonctionnalités puissantes. Le plus important est l’ajout de capacités d’exécution sandbox et de capacités d’échappement automatique en option, qui sont très importantes pour la sécurité de la plupart des applications.

Basé sur Unicode et peut fonctionner sur python2.4 et versions ultérieures, y compris python3.

Comment utiliser Jinja2

Pour utiliser le modèle Jinja2, vous devez importer la fonction render_template depuis flask, puis appeler la fonction render_template dans la fonction de routage. Le premier paramètre de cette fonction est le nom du modèle. Les modèles sont enregistrés dans le répertoire par défaut.

Le fichier modèle le plus simple est un fichier HTML ordinaire, mais les fichiers statiques n'ont aucun sens. Vous devez donc transmettre les paramètres de réponse lors de l'accès à l'itinéraire et les afficher dans le navigateur dans un certain style dans le modèle. , Vous devez utiliser les paramètres de mots-clés de la fonction render_template. Supposons qu'il existe un fichier modèle hello.html, le code est le suivant :

La partie entourée de {{...}} est l'expression du modèle. Lorsque vous utilisez la fonction render_template pour appeler le fichier modèle hello.html, vous devez spécifier la valeur du nom via des paramètres de mots-clés.

<h1> hello,{{name}}.</h1>
Copier après la connexion

Une fois renvoyé au client, {{name}} sera remplacé par une étoile.

Code de sortie de la page Web
render_template('hello.html',name='star')
Copier après la connexion


syntaxe commune jinja2
<h1> hello,star.</h1>
Copier après la connexion

Affichage des données
1.变量显示语法: {{ 变量名 }}
2. for循环:
{% for i in li%}
{% endfor %}
3. if语句
{% if user == 'westos'%}
{% elif user == 'hello' %}
{% else %}
{% endif%}
Copier après la connexion

# templates目录里面建立mubna.html文件
nbsp;html>


    <meta>
    <title>hello</title>


<p>变量:{{ name }}</p>
<p>列表:{{ li }}</p>
<p>列表元素:
{% for item in li  %}
<br>{{ item }}
{% endfor %}</p>
<p>字典:{{ d }}</p>
<p>字典元素:
{{ d.a }}
{{ d['b'] }}</p>
<p>对象:{{ u }}</p>
Copier après la connexion
                                                       
用户密码
{{ u.name }}{{ u.passwd }}
from flask import Flask, render_template

app = Flask(__name__)

class User(object):
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def __str__(self):
        return  "<user:>" %(self.name)

@app.route('/')
def index1():
    name = "sheen is cute !!"
    li = [1, 2, 4, 5]
    d = dict(a=1, b=2)
    u = User("westos", "passwd")
    return  render_template('muban.html',
                            name = name,
                            li = li,
                            d = d,
                            u = u
                            )

app.run()</user:>
Copier après la connexion

Quest-ce que Jinja2 en python ? Comment utiliser ? dans modèle Filtre

Les données renvoyées par le serveur au client peuvent provenir de diverses sources de données. Ces formats de données peuvent ne pas répondre aux besoins du client et les données doivent être retraitées. Le filtre doit être placé après la variable d'expression du modèle, séparé de la variable par '|', {{ vlaue|upper}} convertit toutes les lettres anglaises de la valeur en majuscules.

Écrivez un filtre temporel pour convertir l'horodatage en une heure de chaîne dans un format spécifique


from flask import Flask, render_template
import time
app = Flask(__name__)


def time_format(value,format="%Y-%m-%d %H:%M:%S"):
    #  时间戳----> 元组
    t_time = time.localtime(value)
    #  元组  ----> 指定字符串
    return time.strftime(format,t_time)
# 第一个参数是过滤器函数,第二个参数是过滤器名称
app.add_template_filter(time_format,'time_format')

@app.route('/chtime/')
def chtime():
    return render_template('chtime.html',timestamp = time.time())


app.run()
Copier après la connexion
# templates/目录下的chtime.html
nbsp;html>


    <meta>
    <title>Title</title>


时间戳
{{ timestamp }}
<br>
格式化后的时间
{{ timestamp | time_format }}


Copier après la connexion

Quest-ce que Jinja2 en python ? Comment utiliser ?Opérations macro

Lors de l'écriture d'un programme python, il y aura de nombreux endroits où le même code ou un code similaire sera appelé. Dans ce cas, vous pouvez placer le code réutilisé dans une fonction ou une classe, et il vous suffit d'accéder à l'instance de la fonction ou de la classe pour réaliser la réutilisation du code. Les macros sont utilisées dans les modèles Jinja2 pour empêcher la redondance du code.

Les macros du modèle Jinja2 doivent être placées dans {%......%}, utiliser des modifications, prendre en charge les paramètres et se terminer par {% endmacro %}

Si le la macro doit être utilisée plusieurs fois. Pour partager un fichier modèle, vous devez placer la macro dans un fichier modèle séparément, puis utiliser la commande {% import ....%} pour importer le modèle

Appelez la macro pour réaliser l'héritage du modèle de la page de connexion

## templates/目录下的macro.html
{% macro input(type,  name, text ) %}

 <p>
            <label>{{ text }}</label>
            <input>
        </p>
{% endmacro %}
Copier après la connexion
# # templates/目录下的login.html
{% extends "base.html" %}

{% block title %}
登陆
{% endblock %}


{% block content %}
<p>
    </p><h1>登录
        <small>没有账号?<a>注册</a></small>
    </h1>

{#    /*将表单信息提交给/login路由对应的函数进行处理, 并且提交信息的方式为post方法, 为了密码的安全性*/#}
    
Copier après la connexion
                                                             {% import 'macro.html' as macro %}         {#调用宏模板#}         {{macro.input('text', 'user', "用户名/手机/邮箱" )}}         {{macro.input('password','passwd',  "密码" )}}                                                     

                     

        

            忘记密码?         

                 {% if message %}         

{{ message }}

        {% endif %}     
{% endblock %}
#主程序
from flask import Flask, render_template

app = Flask(__name__)

@app.route('/login/')
def login():
    return render_template('login.html')

app.run()
Copier après la connexion

Quest-ce que Jinja2 en python ? Comment utiliser ? Héritage de modèles

Le modèle Jinja2 a une autre technologie de réutilisation de code : l'héritage de modèles. Lorsqu'un modèle est hérité par un autre modèle, les ressources du modèle parent sont accessibles via {{ super() }}. L'héritage d'un modèle d'un autre modèle nécessite la directive extends. Par exemple, le fichier modèle child.txt hérite du code de parent.txt

Une fois que child.txt hérite du modèle parent.txt, tout le code de parent.txt sera automatiquement utilisé, mais il doit être placé dans

{% extends ‘parents.txt’ %}
Copier après la connexion
Le code dans

doit être référencé en utilisant {{super() }} dans child.txt. Parmi eux, xxxx est le nom du bloc

Syntaxe d'héritage du modèle :
{% block xxxx%} ....  {% endblock %}
Copier après la connexion


1. 如何继承某个模板?
        {% extends "模板名称" %}


2. 如何挖坑和填坑?
挖坑:
    {% block 名称 %}

        默认值

    {% endblock %}


填坑:
    {% block 名称 %}

    {% endblock %}


3. 如何调用/继承被替代的模板?
挖坑:
    {% block 名称 %}

        默认值

    {% endblock %}


填坑:
    {% block 名称 %}
        #如何继承挖坑时的默认值?
        {{ super() }}

        # 后面写新加的方法.
        ........
    {% endblock %}
Copier après la connexion
#templates目录下建立parent.html模板文件
nbsp;html>


    {% block head %}
    <meta>
    <title>{% block title %}hello{% endblock %}</title>
    {% endblock %}


I LOVE PYTHON! <br>
{% block body %}
    Cute,{{ text }}
{% endblock %}


Copier après la connexion
#templates目录下建立child.html模板文件
{% extends 'parent.html' %}
{% block title %}
{#继承挖坑时的默认值:{{ super() }}#}
{{ super() }}-{{ text }}
{% endblock %}

{% block body %}
<h1>{{ super() }},Beauty!</h1>
{% endblock %}
Copier après la connexion
# 主程序
from flask import Flask,render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('child.html',text = 'sheen')

if __name__ == '__main__':
    app.run()
Copier après la connexion

Quest-ce que Jinja2 en python ? Comment utiliser ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal