1.テンプレートとは何ですか?
応答のために使用されるHTMLテンプレートファイル、ページデザインとPythonコードよりクリーン分離を維持しやすいです。私たちは、Djangoの使用できる テンプレートシステム の問題は、この章で詳しく説明されるこのモデルを実装する(テンプレートシステムを)。
2、変数テンプレート構文
方法、ビュー広がり関数テンプレートにテンプレートができ、次いで{{「変数名」}}参照変数を辞書可変方法をレンダリングします。
ビュー:
デフ指数(リクエスト): 名 = ' アレックス' 年齢 = 22人の 学生 = [ ' アレックス'、' taibai '、' nvshenは' ] を返す(リクエスト、レンダリング' index.htmlを'、{ ' 名前'名前:' 年齢':年齢、' 学生':学生}
自分自身を設定することができ、キーのキー名
テンプレート:
<身体> <p型>名{名}} {</ p型> <p型>年齢{{年齢}} -歳</ p型> <p型>学生students.0}} {{</ p型> #この方法リスト内の特定の要素を抽出し、インデックス <P>学生students.1} {} {</ P> </ BODY>
あなたは多くの変数を渡す必要がある場合は、あまり便利でレンダリングするので、地元の人たち()メソッドを使用するには、一つ一つを書きます
デフ指数(要求): 名 = ' アレックス' 年齢 = 22人の 学生 = [ ' アレックス'、' taibai '、' nvshen ' ] へ = { ' 名前':' アレックス'、' 年齢' 100、' 性別':「他の」} リターンがレンダリング(リクエスト、「index.htmlを」、地元の人々())
これは、すべての変数に渡すことができます。
3、フィルタテンプレート
変数の特定の形式{{|フィルタ:パラメータ}}
デフォルト:変数がfalseまたは空の場合、デフォルト値が与えられました。それ以外の場合は、変数の値を使用します。例えば:
<P> {{book_list1 |デフォルト:' 一致するブック' }} </ P>
長さ:戻り値の長さ。これは、文字列とリストの両方を動作します。例えば:
{{リスト|長さ}}
filesizeformat:将值格式化为一个 “人类可读的” 文件尺寸 (例如
'13 KB'
, '4.1 MB'
, '102 bytes'
, 等等)。例如:
{{fail_size | filesizeformat}}
日付:変換時間必要な形式。例えば:
ビュー:
値= datetime.datetime.now()
テンプレート:
{{値|日付:" はYmd " }}
これは、ことができます。
{{値|日付:" Y / M / D " }}
スライス:文字列セクション。例えば:
{{値|スライス:" 2:-1 " }}
truncatechars:文字列が指定した文字数を超えている場合、それは切り捨てられます。翻訳可能な文字列が省略記号の末尾に列を切り捨てられます(「...」)。例えば:
ビュー:
市= 「あなたは古いものと灰色と睡眠に満ちている、火によってうなずいたとき、この本をテイクダウン、そしてゆっくりと読んで、そして優しい表情の夢」
テンプレート:
<P> {{市| truncatechars:5}} </ P>
結果:WHE ...
注意:... 3つのバイトの位置を占めなければなりません。
安全:Djangoはセキュリティのために、自動的に種々の標識を翻訳し、時には我々は彼の翻訳に躊躇し、私たちは安全を必要としています。例えば:
直接変数にビュー:(、界面での文字列を生成し、フィルタ)はタグAを生成するために、安全で添加しなければなりません
リンク= " <a href=の'http://www.baidu.com'>点我</a>を"
テンプレート:
<P> {{リンク|安全}} </ P>
図4に示すように、テンプレートタグ
タグの各要素を通ります。例えば:
{%ための人で person_list%} <P> {{person.name}} </ P> {%ENDFOR%}
辞書も利用可能です。
{%ためのキー、ヴァルで dic.items%} <P> {{キー}}:{{ヴァル}} </ P> {%ENDFOR%}
独自のメソッドを移動するためのタブ。
forloop.counter:この世代は、いくつかのサイクルが得る最初の要素です。
{%用ブックにおける book_listの%} <LI> {{forloop.counter}}、{{書籍}} </ LI> {%ENDFOR%}
forloop.counter0:上記のように、しかし、ゼロからの変更。
forloop.revcounter:ターン
forloop.revcounter0:ゼロからのターン
forloop.first:ディスプレイがTrueの場合、この要素を分析することは、取得した最初のサイクルではありません。
forloop.last:この要素を分析するには、ディスプレイがFalseで、前回のサイクルでは得られません。
以下のために...空のタグ:のための オプションとラベル{% 空 %} 節、セットを与えるために、空であるか、またはそれが見つからない場合、操作があってもよいです。
{%ための人で person_list%} <P> {{person.name}} </ P> {%空%} <P>申し訳ありませんが、人ここで</ P> {%ENDFOR%}
もしタグ:{% 場合 %は}である変数評価は、その値が「真」である場合(存在し、空ではない、としない偽のブール値型である)、ブロック意志出力対応するコンテンツ。
{%IF NUM> 100 または NUM <0%} 無効</ P> <P> {%のelif NUM> 80 と NUM <100%} <P>エリート</ P> {%他の%} <P>港ライブそれ</ P> {%} ENDIF%
ラベルのタグ場合に設定することができます:
{%ための人で person_listの%} {%なら person.age> 900パーセント} <P> {{person.name}}、{{person.age}} </ P> {%ENDIF%} {%ENDFOR%}
タグと:単純な名前のキャッシュに複雑な変数を使用し、それは非常に便利であるとき、あなたは何回も(データベースアクセスなど)メソッドを使用する必要がある場合、。
{名前= person_list.2.nameの%と%} <P> {{名前}} </ P> {%ENDWITHの%}
これは、プレゼンス名でperson_list.2.name変更を入れ、常にこのような複雑なために見ていません。
csrf_tokenレーベル:ラベルは、ユーザー認証のために、トークンを生成し、クロスサイトリクエストフォージェリを保護するために使用されます。
5、継承されたテンプレート
私たちは同じですが、ただ異なるところ個々のラベルの複数のページの一般的なフレームワークを持っている場合は、すべてのページ私たちは、テンプレートのすべてを書き出します場合、に、簡潔にコードのため、コードの重複がたくさんなので、この時間があるでしょう私たちは他のテンプレートを継承使用するためのファイルにこれらの反復コードを使用することができ、このファイルはマスターと呼ばれています。
ブロック - マスターでは、ボックス(フック)として知られている他のサブテンプレートのタグを追加するための具体的な場所は、あります。
テンプレートbase.html
<DIV クラス = " COL-MD-。9 " > {%ブロック競合%} <H3> WELCOM </ H3>#サブパレットないコンテンツ、ここではコンテンツがコンテンツであれば、カバーここで、サブテンプレート、返されない場合コンテンツ。 {%の末端ブロック%} </ div>
サブテンプレートのindex.html
{%は拡張' base.html '%} の<div クラス = " ジャンボトロン" > <H1>こんにちは、世界!</ H1> <P> ... </ P> <P> < クラス = " BTN btn-プライマリBTN-LG "のhref = " #"の役割= " ボタンは" >詳細</a> </ P>学ぶ </ div> {%の末端ブロック%}を
ここで{% extends %}
システムにアクセスするときに注意してください、base.htmlに戻って第1の向きに、主人はbase.htmlあるシステム、index.htmlのページを指示するラベル:{% extends %}
ラベルは、サブテンプレートの最初の行でなければなりません。
ボックスのマスター複数設けられ、より良いことができます。
あなたはボックスの内容とサブテンプレートを表示する必要がある場合は、{{block.super}}タグを使うことができ、
{%が延び' base.html '%} {%ブロックは%を争う} {{block.super}} <divのクラス = " ジャンボトロン" > <H1>こんにちは、世界!</ H1> <P> ... </ P> <P> <a クラス = "BTN btn-primary btn-lg" href= "#" role= " ボタン">詳細</a> </ P>学ぶ </ div> {%の末端ブロック%}
読みやすくするため、また、あなたの与えることができます {% endblock %}
タグ の名前を 。例えば:
{%ブロックコンテンツ%}
...
{%の末端ブロック含有量%}
同じ名前の複数のテンプレートで定義することができない block
タグ。