***


文書ディレクトリ
  • jinja2
  • jinja 2を導入して
  • をレンダリング
  • を使用
  • 構文
  • 変数{}}
  • 表示
  • テンプレートに変数を追加し、(set)文を使用できます.
  • ローカル変数
  • if構造
  • forサイクル
  • 反復リスト
  • 反復辞書
  • ループにelse
  • を加える
  • 特殊演算子
  • フィルタ
  • マクロ

  • jinja2
    jinja 2はFlaskの著者が開発したテンプレートシステムで、当初はdjangoテンプレートを模したテンプレートエンジンであり、Flaskにテンプレートサポートを提供し、その柔軟さ、迅速さ、安全性などの利点で広く使用されていた.
    レンダリングにjinja 2を導入する
    jinja 2モジュールには、構成およびグローバルオブジェクトを格納し、ファイルシステムまたは他の場所からテンプレートをロードするEnviromentというクラスがあります.
    from jinja2 import Environment, FileSystemLoader
    env = Environment(loader=FileSystemLoader('./data/html')) #           
    template = env.get_template('template.html') #         
    template.render(name='daxin',age=18)   #    
    

    Environmentは、PackageLoader:パッケージローダfrom jinja2 import PackageLoader,Environment FileSystemLoader:ファイルシステムローダfrom jinja2 import Environment, FileSystemLoaderの2つのロード方式をサポートします.
    使用
    構文{ { ... }}:変数がロードされ、テンプレートがレンダリングされると、転送された同名パラメータという変数が表す値が置き換えられます.{% ... %}:制御文をロードします.{# ... #}:コメントがロードされ、テンプレートがレンダリングされると、中間の値が無視されます.
    変数{}}
    表示
    jinja 2はpythonのすべてのPythonデータ型、例えばリスト、フィールド、オブジェクトなどをサポートします.
    <p>this is a dicectory:{
         {
          mydict['key'] }} </p>
    <p>this is a list:{
         {
          mylist[3] }} </p>
    <p>this is a object:{
         {
          myobject.something() }} </p> 
    

    テンプレートに変数を追加し、(set)文を使用します.
    {
         % set name='xx' %}
    

    ローカル変数
    withを使用して内部役割ドメインを作成し、set文を配置します.作成した変数はwithコードブロックでのみ有効です.
    {
         % with foo = 42 %}
    {
         {
          foo }}
    {
         % endwith %}
    

    if構造
    {
         % if daxin.safe %}
    daxin is safe.
    {
         % elif daxin.dead %}
    daxin is dead
    {
         % else %}
    daxin is okay
    {
         % endif %} 
    

    forサイクル
    jinja 2のforループは、リスト、メタグループ、辞書など、Pythonを反復するデータ型に使用されます.jinja 2にはwhileループは存在しません.
    反復リスト
    <ul>
    {
         % for user in users %}
    <li>{
         {
          user.username|title }}</li>
    {
         % endfor %}
    </ul>
    

    反復辞書
    <dl>
    {
         % for key, value in my_dict.iteritems() %}
    <dt>{
         {
          key }}</dt>
    <dd>{
         {
          value}}</dd>
    {
         % endfor %}
    </dl> 
    

    ループにelseを加える
    <ul>
    {
         % for user in users %}
    <li>{
         {
          user.username|e }}</li>
    {
         % else %}
    <li><em>no users found</em></li>
    {
         % endfor %}
    </ul>
    

    注意:continueとbreak式を使用して、サイクルの実行Jinja 2におけるforサイクルの組み込み定数を制御することはできません.
    定数
    意味
    loop.index
    現在の反復インデックス(1から)
    loop.index0
    現在の反復インデックス(0から)
    loop.first
    最初の反復であるかどうかは、True/Falseを返します.
    loop.last
    最後の反復であるかどうかは、True/Falseを返します.
    loop.length
    シーケンスの長さ
    特殊演算子
    **号演算子:2**3=8などの二乗演算子.inオペレータ:pythonのinと同様に使用します.たとえば、{ {1 in [1,2,3]}}はtrueを返します.~番号演算子:{ {"Hello" ~ "World"}}などの複数の文字列をつなぎ合わせるとHelloWorldが返されます.
    フィルタ
    フィルタ名
    説明
    safe
    レンダー時に値がエスケープされない
    capitialize
    値の頭文字を大文字に変換
    lower
    値を小文字に変換する
    upper
    値を大文字に変換
    title
    値の各単語の頭文字を大文字に変換
    trim
    値の先頭と末尾のスペースを削除
    striptags
    レンダリング前に値のすべてのHTMLタグを削除
    join
    複数の値を文字列に結合
    replace
    置換文字列の値
    round
    デフォルトでは数値を四捨五入したり、パラメータで制御したりできます.
    int
    値を整数に変換する
    複数のフィルタはチェーンで呼び出すことができ、前のフィルタの出力は後のフィルタの入力として使用されます.
    {
         {
          'abc' | captialize  }}
    # Abc
    {
         {
          'abc' | upper  }}
    # ABC
    {
         {
          'hello world' | title  }}
    # Hello World
    {
         {
          "hello world" | replace('world','daxin') | upper }}
    # HELLO DAXIN
    {
         {
          18.18 | round | int }}
    # 18 
    

    マクロ#マクロ#
    マクロはPythonの関数に似ています.マクロでマクロを定義するキーワードはmacroで、マクロの名前やパラメータなどです.
    {
         % macro input(name,age=18) %}   #   age     18
     <input type='text' name="{
         { name }}" value="{
         { age }}" >
    {
         % endmacro %} 
    

    呼び出し方法
    <p>{
         {
          input('daxin') }} </p>
    <p>{
         {
          input('daxin',age=20) }} </p>