【django】テンプレート組込タグ一覧【1/3】

Django

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】をどうぞ。

【django】テンプレート組込タグ一覧【2/3】
djangoのテンプレート組込タグを紹介します。組込タグを紹介しているサイトは多いですが、サンプル付きでまとまったものがないため、作りました。タグの数が多いので3部に分けています。今回は2部目"for" 〜 "now"を紹介します。

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

タイトルとURLをコピーしました