組み込みタグ
組み込みタグ
Djangoは組み込みタグと呼ばれるコードのようなものを提供しています。
それをHTMLファイルに組み込むことでループや条件分岐等を使うことが出来ます。
そうすることで同じようなコードを重複して書くことを防ぎ、効率的に開発を進めることが出来ます。
load
, block
, include
はこの記事とは別で紹介します。
組み込みタグの種類
autoescape
autoescape
は引数on, offで自動エスケープを制御します。
例
{% autoescape on %}
{{ body }}
{% endautoescape %}
comment
comment
は{% comment %} ~ {% endcomment %}で囲まれた部分をコメント化出来ます。
コメントを付けることも出来ます。
例
<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
<p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}
csrf_token
csrf_token
はクロスサイトリクエストフォージェリ (CSRF) 対策使われます。
HTMLのformタグでPostメソッドを使うときに使われます。
例
<form method="post">{% csrf_token %}
debug
debug
はコンテキストやimportされたモジュールなどを含んだデバッグ情報を出力します。
extends
extends
は親テンプレートを継承します。
例
{% extends "base.html" %}
firstof
firstof
は1個目の引数がTrueのものを表示させます。
例
{% firstof var1 var2 var3 %}
下記と同じです。
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
for
for
はfor文を埋め込むことが出来ます。
例
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
もちろん辞書型も使えます。
例
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
for ... empty
for ... empty
はリストが空、もしくはなかった場合に、表示させるものを指定します。
例
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% empty %}
<li>Sorry, no athletes in this list.</li>
{% endfor %}
</ul>
if
if
はTrueのときブロックの内容を出力します。
例
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
ifchanged
ifchanged
前回のループ実行時と比べ、変わっているときだけ表示します。
例
<h1>Archive for {{ year }}</h1>
{% for date in days %}
{% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
<a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
{% endfor %}
lorem
lorem
はランダムな"lorem ipsum" のラテン語テキストを表示させます。
例
{% lorem %}
now
now
は指定したフォーマット文字列にしたがって現在の日付や時刻を表示します
例
It is {% now "jS F Y H:i" %}
spaceless
spaceless
はブロック内の HTML タグ間にある空白文字を除去します。タブ文字や改行も含みます。
例
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
上記は下記になります。
例
<p><a href="foo/">Foo</a></p>
templatetag
templatetag
はテンプレートタグの構文で使われる文字を、通常の文字として出力します。
例
{% templatetag openblock %} url 'entry_list' {% templatetag closeblock %}
url
url
はビューとオプションの引数を指定して、これとマッチする絶対パスへの参照 ( ドメイン部分を除いた URL ) を返します。
例
sample_app/urls.py
from django.urls import path
from . import views
app_name = 'sample_app'
urlpatterns = [
path('', views.news_list, name='news_list'),
path('news/<int:pk>', views.news_detail, name='news_detail'),
]
上記のようなurls.py
があったとします。
それぞれのURLのリンクを貼るには
例
<a href="{% url 'sample_app:news_list' %}">Topページに戻る</a>
<a href="{% url 'sample_app:news_detail' news.pk %}">{{ news.title }}</a>
verbatim
verbatim
はブロック内でテンプレートエンジンによる解釈を行いません。
これは JavaScript テンプレート の文法が Django と衝突してしまう時によく使われます。
例
{% verbatim %}
{{if dying}}Still alive.{{/if}}
{% endverbatim %}
最後に
今回紹介した組み込みタグ以外にも組み込みタグはあります。
load
, block
, include
、この3つの組み込みタグは別途紹介させていただきます。
Just Python フリープラン
ジャスパイなら教材は全て無料!