ホームページ  >  記事  >  バックエンド開発  >  PythonのJinja2とは何ですか?使い方?

PythonのJinja2とは何ですか?使い方?

不言
不言転載
2018-10-25 15:54:3013289ブラウズ

この記事では、Python の Jinja2 とは何ですか?使い方? 、特定の参考値があり、困っている友人がそれを参照できます。お役に立てば幸いです。

Jinja2 とは

Jinja2 は、Python で次に広く使用されているテンプレート エンジンであり、その設計アイデアは Django のテンプレート エンジンから派生し、その構文とセットが拡張されています。強力な機能を備えています。最も重要なのは、サンドボックス実行機能とオプションの自動エスケープ機能の追加であり、これらはほとんどのアプリケーションのセキュリティにとって非常に重要です。

Unicode に基づいており、python3 を含む python2.4 以降のバージョンで実行できます。

Jinja2 の使用方法

Jinja2 テンプレートを使用するには、flask から render_template 関数をインポートし、ルーティング関数で render_template 関数を呼び出す必要があります。この関数のパラメータはテンプレート名です。テンプレートはデフォルトでディレクトリに保存されます。

最も単純なテンプレート ファイルは通常の HTML ファイルですが、静的ファイルでは意味がありません。ルートにアクセスするときに応答パラメータを渡し、テンプレート内の特定の形式でブラウザに表示する必要があります。 , render_template 関数のキーワード パラメーターを使用する必要があります。テンプレート ファイル hello.html があるとします。コードは次のとおりです。

<h1> hello,{{name}}.</h1>

{{...}} で囲まれた部分がテンプレート式です。 render_template 関数を使用してテンプレート ファイル hello.html を呼び出す場合は、キーワード パラメータを通じて名前の値を指定する必要があります。

render_template('hello.html',name='star')

クライアントに返されると、{{name}} はスターに置き換えられます。
Web ページの出力コード

<h1> hello,star.</h1>

jinja2 共通構文

1.变量显示语法: {{ 变量名 }}
2. for循环:
{% for i in li%}
{% endfor %}
3. if语句
{% if user == 'westos'%}
{% elif user == 'hello' %}
{% else %}
{% endif%}

データ表示

# 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>
                                                       
用户密码
{{ 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:>

PythonのJinja2とは何ですか?使い方?

テンプレート内のフィルター

サーバーからクライアントに返されるデータは、さまざまなデータ ソースから取得される場合があります。これらのデータ形式はクライアントのニーズを満たさない可能性があるため、データを再処理する必要があります。
フィルターはテンプレート式変数の後に配置し、変数と '|' で区切る必要があります。{{ vlaue|upper}} は値のすべての英語文字を大文字に変換します。

タイムスタンプを特定の形式の文字列時間に変換する時間フィルターを作成します
#

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()
# templates/目录下的chtime.html
nbsp;html>


    <meta>
    <title>Title</title>


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


PythonのJinja2とは何ですか?使い方?

# #マクロ操作

Python プログラムを作成する場合、同じまたは類似したコードが呼び出される箇所が数多くあります。この場合、再利用されたコードを関数またはクラスに入れることができ、関数またはクラスのインスタンスにアクセスするだけでコードを再利用できます。 Jinja2 テンプレートでは、コードの冗長性を防ぐためにマクロが使用されます。

Jinja2 テンプレートのマクロは、{%....%} に配置し、変更を使用し、パラメーターをサポートし、{% endmacro %}で終わる必要があります。マクロは複数回使用されます。テンプレート ファイルを共有するには、マクロをテンプレート ファイルに個別に配置し、{% import ....%} コマンドを使用してテンプレートをインポートします

#マクロを呼び出してログイン ページのテンプレートの継承を実現します

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

 <p>
            <label>{{ text }}</label>
            <input>
        </p>
{% endmacro %}
# # templates/目录下的login.html
{% extends "base.html" %}

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


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

{#    /*将表单信息提交给/login路由对应的函数进行处理, 并且提交信息的方式为post方法, 为了密码的安全性*/#}
    
                                                             {% 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()

テンプレートの継承PythonのJinja2とは何ですか?使い方?

Jinja2 テンプレートには、テンプレートの継承という別のコード再利用テクノロジがあります。テンプレートが別のテンプレートに継承されると、親テンプレートのリソースには {{ super() }} を通じてアクセスできます。別のテンプレートからテンプレートを継承するには、extends ディレクティブが必要です。たとえば、child.txt テンプレート ファイルは、parent.txt からコードを継承します

{% extends ‘parents.txt’ %}
child.txt がparent.txt テンプレートから継承すると、parent.txt 内のすべてのコードが自動的に使用されますが、これは必ず使用されます。
{% block xxxx%} ....  {% endblock %}
に配置します。 のコードは、child.txt の {{super() }} を使用して参照する必要があります。このうち、xxxx はブロックの名前です。

テンプレート継承構文:

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


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

        默认值

    {% endblock %}


填坑:
    {% block 名称 %}

    {% endblock %}


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

        默认值

    {% endblock %}


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

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


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


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


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

{% block body %}
<h1>{{ super() }},Beauty!</h1>
{% endblock %}
# 主程序
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()


以上がPythonのJinja2とは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。