Django-template-system
Django-テンプレートシステム
Djangoでは、PythonとHTMLを分離できます。Pythonはビューに、HTMLはテンプレートに含まれます。 2つをリンクするために、Djangoはrender関数とDjangoテンプレート言語に依存しています。
レンダリング関数
この関数は3つのパラメータを取ります-
- リクエスト-最初のリクエスト。
- テンプレートへのパス-これは、プロジェクトのsettings.py変数のTEMPLATE_DIRSオプションに関連するパスです。
- パラメータの辞書-テンプレートで必要なすべての変数を含む辞書。 この変数を作成するか、locals()を使用して、ビューで宣言されたすべてのローカル変数を渡すことができます。
Djangoテンプレート言語(DTL)
Djangoのテンプレートエンジンは、アプリケーションのユーザー向けレイヤーを定義するミニ言語を提供します。
変数の表示
変数は次のようになります:\ {\ {variable}}。 テンプレートは、render関数の3番目のパラメーターで、ビューによって送信された変数で変数を置き換えます。 今日の日付を表示するようにhellolを変更しましょう-
こんにちは
その後、私たちの見解は変わります-
URL/myapp/helloにアクセスした後、次の出力を取得します-
お気付きかもしれませんが、変数が文字列でない場合、Djangoはstrメソッドを使用して表示します。同じ原理で、Pythonで行うのと同じようにオブジェクト属性にアクセスできます。 たとえば、日付の年を表示する場合、変数は\ {\ {today.year}}になります。
フィルター
表示時に変数を変更するのに役立ちます。 フィルター構造は次のようになります:\ {\ {var | filters}}。
いくつかの例-
- \ {\ {string | truncatewords:80}} -このフィルタは文字列を切り捨てるため、最初の80語のみが表示されます。
- \ {\ {string | lower}} -文字列を小文字に変換します。
- \ {\ {string | escape | linebreaks}} -文字列の内容をエスケープし、改行をタグに変換します。
変数のデフォルトを設定することもできます。
Tags
タグを使用すると、if条件、forループ、テンプレートの継承などの操作を実行できます。
タグ付け
Pythonのように、if、else、elifをテンプレートで使用できます-
この新しいテンプレートでは、日付に応じて、テンプレートは特定の値をレンダリングします。
のタグ
「if」と同様に、「for」タグがあります。これはPythonとまったく同じように機能します。 こんにちはビューを変更して、テンプレートにリストを送信しましょう-
\ {\ {for}}を使用してそのリストを表示するテンプレート-
そして、次のようなものを取得する必要があります-
タグのブロックと拡張
テンプレートシステムは、テンプレートを継承しないと完成できません。 テンプレートを設計するときの意味は、選択したタブに特別なcssが必要なページのように、子供のテンプレートが自分の必要に応じて埋める穴のあるメインテンプレートが必要です。
hellolテンプレートをmain_templatelから継承するように変更してみましょう。
こんにちは
上記の例では、/myapp/helloを呼び出すと、以前と同じ結果が得られますが、コードをリファクタリングするためにextendとblockに依存しています-
main_templatelでは、タグブロックを使用してブロックを定義します。 タイトルブロックにはページタイトルが含まれ、コンテンツブロックにはページのメインコンテンツが含まれます。 homelでは、main_templatelから継承するためにextendsを使用してから、上記のブロック定義(コンテンツとタイトル)に入力します。
コメントタグ
コメントタグは、HTMLコメントではなくテンプレートにコメントを定義するのに役立ちます。HTMLページには表示されません。 ドキュメント化やコード行のコメント化に役立つ場合があります。