検索

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

Oct 25, 2018 pm 03:54 PM
html5python

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

Jinja2 とは

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

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

Jinja2 の使用方法

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

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

<h1 id="hello-name"> hello,{{name}}.</h1>

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

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

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

<h1 id="hello-star"> 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 id="super-Beauty">{{ 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で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonアレイをどのようにスライスしますか?Pythonアレイをどのようにスライスしますか?May 01, 2025 am 12:18 AM

Pythonリストスライスの基本的な構文はリストです[start:stop:step]。 1.STARTは最初の要素インデックス、2。ストップは除外された最初の要素インデックスであり、3.ステップは要素間のステップサイズを決定します。スライスは、データを抽出するためだけでなく、リストを変更および反転させるためにも使用されます。

どのような状況で、リストは配列よりもパフォーマンスが向上しますか?どのような状況で、リストは配列よりもパフォーマンスが向上しますか?May 01, 2025 am 12:06 AM

ListSoutPerformArraysIn:1)ダイナミシジョンアンドフレーケンティオン/削除、2)ストーリングヘテロゼンダタ、および3)メモリ効率の装飾、ButmayhaveslightPerformancostsinceNASOPERATIONS。

PythonアレイをPythonリストに変換するにはどうすればよいですか?PythonアレイをPythonリストに変換するにはどうすればよいですか?May 01, 2025 am 12:05 AM

toconvertapythonarraytoalist、usetheList()constructororageneratorexpression.1)importhearraymoduleandcreateanarray.2)useList(arr)または[xforxinarr] toconvertoalistは、largedatatessを変えることを伴うものです。

Pythonにリストが存在する場合、配列を使用する目的は何ですか?Pythonにリストが存在する場合、配列を使用する目的は何ですか?May 01, 2025 am 12:04 AM

choosearraysoverlistsinperbetterperformance andmemoryeficiencyspecificscenarios.1)largeNumericaldatasets:Araysreducememoryusage.2)パフォーマンス - クリティカル操作:ArraysOfferSpeedBoostsfortsfortsclikeappendedoring.3)タイプリー:Arrayesenforc

リストの要素と配列を繰り返す方法を説明します。リストの要素と配列を繰り返す方法を説明します。May 01, 2025 am 12:01 AM

Pythonでは、ループに使用し、列挙し、包括的なリストを通過することができます。 Javaでは、従来のループを使用し、ループを強化してアレイを通過することができます。 1。Pythonリストトラバーサル方法は、ループ、列挙、およびリスト理解のためのものです。 2。Javaアレイトラバーサル法には、従来のループとループ用の強化が含まれます。

Python Switchステートメントとは何ですか?Python Switchステートメントとは何ですか?Apr 30, 2025 pm 02:08 PM

この記事では、バージョン3.10で導入されたPythonの新しい「マッチ」ステートメントについて説明します。これは、他の言語のスイッチステートメントに相当するものです。コードの読みやすさを向上させ、従来のif-elif-elよりもパフォーマンスの利点を提供します

Pythonの例外グループとは何ですか?Pythonの例外グループとは何ですか?Apr 30, 2025 pm 02:07 PM

Python 3.11の例外グループは、複数の例外を同時に処理することで、同時シナリオと複雑な操作でエラー管理を改善します。

Pythonの関数注釈とは何ですか?Pythonの関数注釈とは何ですか?Apr 30, 2025 pm 02:06 PM

Pythonの関数注釈は、タイプチェック、ドキュメント、およびIDEサポートの関数にメタデータを追加します。それらはコードの読みやすさ、メンテナンスを強化し、API開発、データサイエンス、ライブラリの作成において重要です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。