ウルフ本の章要約テンプレートJinja2の

私の個人的なアイデアや理解のより、本の内容だけではなく、私はこの1つは私に大きな助けとインスピレーションを与えたと言わなければならないので、これは私が書くと良い要約です

まず、すべてのアイデアや知識のコード生成にapp.pyコードに沿って

輸入OS 
フラスコインポートフラスコ、render_template、フラッシュ、リダイレクトから、なurl_for、マークアップ

アプリ=フラスコ(__ name__)
app.secret_key = os.getenv( 'SECRET_KEY'、 '秘密の文字列は、')
= Trueのapp.jinja_env.trim_blocks 
app.jinja_envを。 lstrip_blocks = Trueの

ユーザー= { 
    「ユーザ名」:「グレー李」、
    「バイオ」: '。映画や音楽を愛する少年、
} 

映画= [ 
    {「名前」:「となりのトトロ」、「年」:' 1988 '}、
    {'名前': '3色三部作'、 '年': '1993'}、
    {'名前': 'フォレストガンプ'、 '年': '1994'}、
    {'名前':'パーフェクトブルー「 『年』:」1997 '}、 
    {'名前': 'マトリックス'、 '年': '1999'}、
    {'名前': 'メメント'、 '年': '2000'}、 
    {'名前': 'バケットリスト'、 '年': '2007'}、
    { '名前': 'ブラックスワン'、 '年': '2010'}、
    { '名前': 'ゴーン・ガール'、 '年': '2014'}、
    { '名前': 'ココ'、 '今年'2017'} 
] 


app.route( '/ウォッチリスト')@ 
デフウォッチリスト():
    戻りrender_template( 'watchlist.html'、ユーザ=利用者、映画=ムービー)


app.route @( '/')
指数DEF ():
    リターンrender_template( 'index.htmlを')


レジスタテンプレートコンテキストハンドラ
#自定义上下文变量、返回值必须为字典
@ app.context_processor 
デフinject_info():
    FOO = '私がfooです。' 
    リターン{ 'FOO'に等しい戻り辞書(FOO = FOO)#:

 
#カスタムグローバル関数
@ app.template_global()
DEFバー():
    リターン'私はバーです。' 


#テンプレートフィルタ登録
する@ app.template_filter()
:DEF音楽(S)
    リターンS +マークアップ( '♫') 

レジスタテンプレートテスト
する@ app.template_test()
DEFバズ(N):
    もしN == 'バズ':
        リターン真の
    リターン偽


の@ app.route( '/ watchlist2')
DEF watchlist_with_static():
    リターンrender_template( 'watchlist_with_static.html'、ユーザー=ユーザー、映画=映画)


点滅#メッセージ
app.route( '/フラッシュ')@ 
DEF just_flash ():
    フラッシュ( '?私は私を探しているフラッシュ、午前')
    リターンリダイレクト(なurl_for( 'インデックス'))


app.errorhandler(404)@は
デフ(e)をpage_not_found:
    戻りrender_template( 'エラー/ 404.html')、404


#500エラーハンドラ
の@ app.errorhandler(500)
デフINTERNAL_SERVER_ERROR(E):
    リターンrender_template( 'エラー/ 500.html')、500 

app.run(デバッグ=真)

 まず、インスタンスを作成します

情報ユーザリストや映画のすべてが、この情報の出力に戻るには、HTMLページで、新しいURLを新しいURLに達しました

だからここが新しいwatchlist.htmlを作成し、目的は、着信コンテンツを視聴するには、対応するHTML URL関数を返すことです

watchlist.htmlコード

<!DOCTYPE HTML> 
<HTML LANG = "EN"> 
<HEAD> 
    <メタ文字コード= "UTF-8"> 
    <タイトル> {{user.username}}のウォッチリスト</ TITLE> 
</ HEAD> 
<BODY> 

<a href="{{ url_for('index') }}">←戻る</a>の
<H2> {{user.username}} </ H2> 

{%ならuser.bio%} 
    <I> {{ user.boio}} </ i>は
、{%他%} 
    <I>このユーザは、生体を提供していない。</ I> 
{%のENDIFの%} 

<H5> {{user.username}}のウォッチ・リスト({{ムービー|長さ}})</ H5> 
<UL> 
    映画の中で映画%}の{%
        <LI> {{movie.name}} - {{movie.year}} </ LI>
    {%ENDFOR%} 
</ UL> 

</ body> 
</ HTML>

また、一般的にJinja2のテンプレートの構文で使用される2つの知識ポイントは、forループと判断場合があります

唯一の注目すべき事は、対応するエンドに対応するであろう開始することです

{%XXX%の場合} ----- {%ENDIF%}

{XXX%用%} ---- {%ENDFOR%}

テンプレート内の変数は、ビュー機能をインポートする必要があります

コードの流れ、その後の分析:

1.コンテキスト変数:

コンテキスト変数は、モジュールがグローバル変数に対応し、モジュールに直接使用することができます。

コンテキストデコレータ@のapp.context_processorを使用したカスタム変数

(1)@ app.context_processor

デフXXX():

  パス

(2)コースの機能を定義することにより、この関数は、のようにして処理に戻ります

デフXXX():

  パス

app.context_processor(XXX)

2.グローバル関数:グローバル関数は、すべてのモジュールの同等品を使用することが可能です。

app.template_global @:グローバル関数は、カスタムデコレータの使用であります:

3.フィルタ:テンプレートツール、操作対象|濾過法(例えばwatchlist.html {{映画|長さ}})を計算どのくらいムービー

4.テスター:テスターは、文字通りの意味と比較試験から決定するために使用されます

キーデコレータする@ app.templat_text()は、次の例を、比較に応じて結果を返すために、次にバズ機能着信パラメータ、比較、そしてすることを意味するように

基本テンプレート:Jinja2のの魂に来ます

人気理解するために、テンプレートベースの意味は、ブロックを共有しています

ブロックテンプレートの概念は、いくつかのブロックに分割し、

<!DOCTYPE HTML> 
<HTML> 
<HEAD> 
    {%ブロックヘッド%} 
        <メタのcharset = "UTF-8"> 
        <タイトル> {%ブロックタイトル%}テンプレート- HelloFlask {%の末端ブロック%} </タイトル> 
        <リンクREL = "アイコン"タイプ= "画像/ Xアイコン" HREF = "{{( '静的'、ファイル名= 'favicon.icoを')}なurl_for}"> 
        {%ブロックスタイル%} 
            <リンクREL = "スタイルシート"タイプ= "テキスト/ CSS" HREF = "{{なurl_for( '静的'、ファイル名= 'style.cssに')}}"> 
        {%の末端ブロック%} 
    {%の末端ブロック%} 
</ HEAD> 
<BODY> 
<NAV> 
    <UL> <LI> <HREF = "{{なurl_for( 'インデックス')}} ">ホーム</a>の</ LI> </ UL> 
</ NAV> 

<メイン> 
    {%ENDFOR%} 
    {get_flashed_messagesにおけるメッセージの%()%}
        <DIV CLASS = "警告"> {{メッセージ}} </ div> 
    {%ブロック含量%} {%の末端ブロック%} 
</メイン> 
<フッタ> 
    {%ブロックフッタ%} 
        <小> 2018©<HREF = 「http://greyli.com」タイトル=「グレーリーによって書かれた」>グレー李</a>の/ 
            <のhref =「https://github.com/greyli/helloflask」タイトル=「GitHubの上で私をフォーク」 > GitHubの</a>の/ 
            <a href="http://helloflask.com" title="A HelloFlask project"> HelloFlask </a>の
        </小> 
    {%の末端ブロック%} 
</フッタ> 
{%ブロックスクリプト%} {%の末端ブロック%} 
</ BODY> 
</ HTML>

 上記の分析コードから

{%ブロックヘッド%}二つのブロックが存在します

キャプションの{%ブロックタイトル%}であります

別のエンドブロックに対応する{%のendblcokの%}キーワードを使用する必要があり、読み出しCSSリンクブロックを各端部を格納するための{%ブロックスタイル%}です。

最初のジャンプで、<body>タグではホーム・ページにジャンプする小さなホームボタンがあり、

その後、サブモジュールの継承を容易にするために、メッセージ内の<メイン>タグフラッシュメッセージを読み取り、情報の{%ブロックコンテンツ%}のために保存

フッター情報を格納するために使用される{%ブロックフッタ%}ブロック内の<フッタ>タグを作成します。

最後のブロックは、配置ブロックリンクの{%ブロックスクリプト%} JSのスクリプトであります

前記サブテンプレートの継承

限り、子が継承されるように、テンプレートベースのモジュールは、「ベース・テンプレート名を」拡張テンプレートを使用し始めました

そして、コンテンツや書き込みの内容は、メインモジュールは、操作ブロック内で定義されていなければならないとき、

{%ブロックコンテンツ%} {XXX%の末端ブロック%}、中間サブモジュールの内容が追加されます。

7.ロード静的ファイル(js.css.img)

次のように静的ファイル、{%ブロックスタイル%}ローディングCSSファイルをロードするための<link>タグを使用して、ファイルは、JS {%ブロックスクリプト%}にロードされます

8.マクロ

9.マクロロード静的ファイル

10.ロードFavion:ページには、小さなアイコンが表示されています

リンクタグはモジュールで直接使用し、ラベルファイルの選択のプロパティに注意を払います

 

おすすめ

転載: www.cnblogs.com/dachang/p/11189416.html