djangoのテンプレート組込タグを紹介します。
簡単なサンプル付きですが、
タグの数が多いので3部に分けています。
今回は1部目(”autoescape” 〜 “firstof”)までです。
autoescape
自動エスケープを制御します。このタグは引数に on / off を使用します。
onで自動エスケープの有効、offで無効を決定します。
ブロックの最後は {% endautoescape %} タグで閉じるようにします。
サンプル 注意) test : “<div>aaa</div>”です。
{% autoescape on %}
{{ test }}
{% endautoescape %}
出力
>> <div>aaa</div>
{% autoescape off %}
{{ test }}
{% endautoescape %}
出力
>> aaa
block
親テンプレートに空のブロックタグを設け
子テンプレートの同ブロックタグで埋める。
呼び出しは子のテンプレート名だが
親テンプレートをベースとして呼び出す形となる。
テンプレートの継承と呼ばれているらしい。
サンプル(親テンプレートをbase.html, 子のテンプレートをmain.htmlとしています。)
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
This is a test article.
{% endblock %}
この二つのHTMLが “block” で親テンプレートを
子テンプレートが参照して、以下のような形になります。
<head>
<title>My amazing blog</title> #子テンプレートの要素
</head>
<body>
<div id="content">
This is a test article. #子テンプレートの要素
</div>
</body>
こんな感じです。なんとなく複雑です。
詳細はThe Django Template Language -テンプレートの継承にあります。
comment
commentで囲った部分が全て無視される。
最初のタグには追加の説明文がつけれる。
サンプル
<p>Sample text</p>
{% comment "説明文" %}
<p>Commented out text</p>
{% endcomment %}
出力
>> Sample text
詳細はThe Django Template Language -Commentsを参考にしました。
csrf_token
このタグは CSRF の防止のために使用します。
詳細はこちらのクロスサイトリクエストフォージェリ対策を参考にしてください。
サンプル
<form method="post">{% csrf_token %}
cycle
タグを実行するごとに最大4個の引数の
文字列や変数から順に一つずつ値を出力します。
サイクルが全ての値を出力すると最初の1個目に戻ります。
サンプル( somelist = [1,2,3] とし、HTMLの文法は多少無視しています。)
{% for i in range(3) %}
<div class="{% cycle 'row1' 'row2' %}">
No.{{ i }}は {% cycle '奇数' '偶数'%}
</div>
{% endfor %}
このサンプルは以下の形と同じです。
<div class="row1"> No.1は奇数</div>
<div class="row2"> No.2は偶数</div>
<div class="row1"> No.3は奇数</div>
より詳細はこちらの組み込みタグとフィルタ-cycleを参照してください。
debug
現在のコンテキストや import されたモジュールなどを
含んだデバッグ情報ひと揃いを出力します。
extends
このテンプレートが親テンプレートからの拡張であることを指示します。
使い方は2種類あります。よく使うのは前者の方です。
- {% extends “base.html” %}の場合、 “base.html” を親テンプレートの名前として使います。
- {% extends variable %}の場合、変数variableを親テンプレートとして使います。
全体的なサンプルは”block”の部分で紹介しました。
extendsの書き方の部分のみサンプルを示します。
以下のようなパスの書き方も有効です。
{% extends "./base1.html" %}
{% extends "../base2.html" %}
{% extends "./next/base3.html" %}
filter
タグブロック内のコンテンツを1 つまたは複数のフィルタに通します。
複数のフィルタを使うときは ” | ” (パイプ)を使って連結します。
フィルタには変数のように引数を与えることができます。
組込のフィルタの中では
“filter”を使うことができるものが限定的ですが、
今のところ、”force_escape”/”slugify”/
“lower”/”upper”が使えることが確認できています。
サンプル(スペースをハイフンにするslugifyと全て小文字にするlowerの組み合わせ)
{% filter slugify|lower %}
This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}
出力
>> this-text-will-be-html-escaped-and-will-appear-in-all-lowercase
firstof
与えられた引数の中から「 false」 でない最初の 1 つを出力します。
すべて の変数が「false」 だった場合
フォールバック値として文字列を渡すことができます。
フォールバック値を設定しない場合、何も出力しません。
サンプル
{% firstof var1 var2 "fallback value"%}
上記と次のif文は同じ意味になります。
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% else %}
fallback value
{% endif %}
詳しくは組み込みタグとフィルタ-firstofを参考にしてください。
django テンプレート組込タグ 続き
以上がdjangoテンプレートの組み込みタグ3部中の
1部目”autoescape” 〜 “firstof”でした。
djangoテンプレートの組み込みタグ
3部中の2部目(“for” 〜 “now”)は
こちらの【django】テンプレート組込タグ一覧【2/3】をどうぞ。

3部目はまた後日記述します。