flaskにおけるテンプレート日付フォーマット制御とjinja 2におけるテンプレートフォーマット制御

3139 ワード

1.flaskのモジュール言語はjinja 2を採用しており、まずjinja 2のテンプレートフォーマット制御の使用、すなわちテンプレートカスタムfiltersの使用について述べる.
pythonのスクリプトは次のとおりです(日付をフォーマットで表示します).
         1 from jinja2 import Environment, PackageLoader    2 import datetime    3 env=Environment(loader=PackageLoader('app','templates'))    4 def dateformat(value, format="%Y-%m"):    5     return value.strftime(format)    6 env.filters['dateformat'] = dateformat    7 template=env.get_template('mytemplate.html')    8 print template.render(date=datetime.date(1989,4,9))は、スクリプトのjinja 2の環境構成から分かるように、このスクリプトの同級ディレクトリに対応するapp/templates/mytemplateがある.htmlと_init__.pyファイル.
  mytemplate.htmlのファイル内容は以下の通りです.
     
       
現在時刻{{date|dateformat("%Y-%m-%d")}//は呼び出し関数dateformate(date,"%Y-%m-%d")|{date|dateformat}}対応関数dateformat(value=date)
       
      
これによりpythonスクリプトを実行してフォーマット出力日をカスタマイズできます.
 2.次にflaskでのカスタムfiltersの使用について説明します.
ネットワークからの抜粋:
               from jinja2.environment import Environment
               environment = Environment()
               environment.filters['datetimeformat'] = datetimeformat T
              his creates a new environment that flask does not know about. You will have to attach it to the environment that flask uses:
              app.jinja_env.filters['datetimeformat'] = datetimeformat
したがってflaskアプリケーションでは上記の方法は採用できません.カスタムfiltersをflaskの環境変数に追加するには、次のようにします.
              from flask import Flask
      app = Flask(__name__)    def datetimeformat(value, format="%Y-%m"):         print value,type(value)       return value.strftime(format)    app.jinja_env.filters['datetimeformat'] = datetimeformat
              ------------------------------------------------------------------------------------------------------
もちろん、カスタム関数は、以下のように個別に含まれることが望ましい.
          import jinja_filters           app =Flask(__name__)           app.jinja_env.filters['filter_name1']= jinja_filters.filter_name1           app.jinja_env.filters['filter_name2']= jinja_filters.filter_name2
これにより、flaskが適用するテンプレートでカスタムフィルタ関数を直接使用できます.