Django Templatesの詳細:高度な機能と最適化手法
こんにちは、 ジャンゴ 開発者の皆さん!今日は 基礎に続き、Django Templatesの詳細な機能について説明します。 基本的なテンプレートの使い方はもう慣れましたよね? もう一歩進んで、テンプレートをより効率的に使って、プロジェクトをよりパワフルにする時が来ました。あなたのDjangoスキルを次のレベルに引き上げる準備はできましたか? さあ、始めましょう。
Django Templatesの詳細 - テンプレートの継承

Django Templatesの最も強力な機能の1つは、まさに テンプレート継承これにより、コードの重複を減らし、一貫性のあるレイアウトを維持することができます。
基本テンプレートの作成
まずは base.htmlという基本テンプレートを作ってみましょう。
<!DOCTYPE html>
<html lang="ko">
<!-- HTML5 문서의 시작을 선언하고, 주 언어를 한국어로 지정 -->
<head>
<meta charset="UTF-8">
<!-- 문서의 문자 인코딩을 UTF-8로 설정 -->
<title>{% block title %}My Django Site{% endblock %}</title>
<!-- 페이지 제목을 위한 블록. 자식 템플릿에서 재정의 가능 -->
{%ブロック extra_head %}{% endblock %}
<!-- 추가적인 head 요소를 위한 빈 블록. 필요시 자식 템플릿에서 내용 추가 가능 -->
</head>
<body>
<header>
{% ブロックヘッダ %}
<h1>マイサイトへようこそ</h1>
{% endblock %}
<!-- 헤더 섹션을 위한 블록. 기본 환영 메시지 포함. 자식 템플릿에서 변경 가능 -->
</header>
<main>
{%ブロック内容 %}
{% endblock %}
<!-- 메인 콘텐츠를 위한 빈 블록. 각 페이지의 주요 내용이 여기에 들어감 -->
</main>
<footer>
{%ブロックフッター%}。
<p>2025 My Django Site</p>
{% endblock %}
<!-- 푸터 섹션을 위한 블록. 기본 저작권 정보 포함. 자식 템플릿에서 수정 가능 -->
</footer>
</body>
</html>テンプレートの継承を使用する
これで、この基本テンプレート(base.html)を継承して新しいページを作ってみましょう。
{% は "base.html" % を拡張します。}
<!-- base.html 템플릿을 상속받음을 선언 -->
{%ブロックタイトル%}ウェルカムページ{%エンドブロック%}ウェルカムページ
<!-- base.html의 title 블록을 "Welcome Page"로 대체 -->
{%ブロックコンテンツ %}
<h2>ようこそ!</h2>
<p>このページはDjango Templateの継承を使って作りました。</p>
{% endblock %}
<!-- base.html의 content 블록에 새로운 내용을 추가 -->
{% block extra_head %}
<style>
h2 { color: #007bff; }
</style>
{% endblock %}
<!-- base.html의 extra_head 블록에 CSS 스타일을 추가 -->こうすれば、基本的な構造はそのままに、必要な部分だけを修正することができます。 本当に便利ですよね。
カスタムテンプレートタグとフィルターの作成
Djangoが提供するデフォルトのタグとフィルターだけでは物足りない? 心配しないでください。自分たちで作ることができます!

カスタムフィルターの作成
まずは myapp/templatetags/custom_filters.py ファイルを作成し、次のように書いてみてください。
from django import template # Djangoのtemplateモジュールをインポートします。
register = template.Library() # 新しいテンプレートタグライブラリを生成します。
@register.filter # add_exclamation 関数をテンプレートフィルターとして登録します。
def add_exclamation(value):
return f"{value}!" # 与えられた値の後に感嘆符を追加します。
@register.filter(name='multiply') # multiply_by 関数を'multiply'という名前のフィルターとして登録します。
def multiply_by(value, arg):
return value * arg # 与えられた値を引数として受け取った数と乗算します。
#の使用例:
# {{ "Hello" | add_exclamation }} -> 出力: Hello!
# {{ 5|multiply:3 }} -> 出力: 15
# 注意: このファイルを使うには、アプリの templatetags フォルダに保存してください、
#テンプレートで{% loadファイル名%}でロードする必要があります。
これでテンプレートでこのように使えるようになりました:
{% load custom_filters %}
<!-- custom_filters.py 파일에 정의된 커스텀 필터들을 로드합니다. -->
<p>{{ "こんにちは"|add_exclamation }}</p>
<!-- "Hello" 문자열에 add_exclamation 필터를 적용합니다.
결과: <p>Hello!</p> -->
<p>{{ 5|multiply:3 }}</p>
<!-- 숫자 5에 multiply 필터를 적용하고 인자로 3을 전달합니다.
결과: <p>15</p> -->カスタムタグの作成
タグを作るのも難しくありません。 myapp/templatetags/custom_tags.py ファイルを作って、
from django import template
# Djangoのtemplateモジュールをインポートします。
from django.utils.safestring import mark_safe
# HTMLを安全にレンダリングするためmark_safe関数をインポートします。
register = template.Library()
# 新しいテンプレートタグライブラリを生成します。
@register.simple_tag
# bootstrap_alert関数をsimple_tagとして登録します。
def bootstrap_alert(message, alert_type='info'):
# message: アラートに表示するメッセージ。
# alert_type: アラートのタイプ(デフォルトは'info')
return mark_safe(f'<div class="alert alert-{alert_type}">{message}</div>')
# Bootstrapスタイルの通知divを生成して、mark_safeを使って安全なHTMLで表示します。
#の使用例:
# {% bootstrap_alert "注意してください!" "warning" %}
#の出力: <div class="alert alert-warning">ご注意ください!</div>
# 注意:このファイルを使用するには、アプリのtemplatetagsフォルダに保存し、
#テンプレートから{% loadファイル名%}でロードする必要があります。テンプレートではこのように使用します。
{% load custom_tags %}
<!-- custom_tags.py 파일에 정의된 커스텀 태그들을 로드합니다. -->
{% bootstrap_alert "注意してください!" "warning" %}
<!-- bootstrap_alert 커스텀 태그를 호출합니다.
첫 번째 인자 "주의하세요!"는 알림에 표시될 메시지입니다.
두 번째 인자 "warning"은 알림의 유형을 지정합니다.
이 태그는 다음과 같은 HTML을 생성합니다:
<div class="alert alert-warning">주의하세요!</div>
-->テンプレートの最適化手法
Django Templateを使うときにパフォーマンスを上げる方法もあります。 いくつかのヒントを紹介します。
- テンプレートフラグメントキャッシング:頻繁に変更されない部分はキャッシュしておくといいですよ。
{%キャッシュをロードします %}
{# cache テンプレートタグライブラリを読み込みます #}
{% cache 500 sidebar %}
{# 500秒間、「sidebar」という名前で内部コンテンツをキャッシュします #}
{# キャッシュの期間中、後続のリクエストは保存されたバージョンを使用してパフォーマンスを向上させます #}
<!
{# この部分には、実際にキャッシュしたいテンプレートコードが入ります #}
{# 例:データベースのクエリ結果、複雑な計算など #} <!
{% endcache %} {#
# キャッシュブロックの終わりを表します #} {#- 不要なコンテキスト変数を削除:
とタグを使って複雑な変数を単純化することができます。
{% with total=business.employees.count %}
{% comment %}
withタグを使用して、business.employees.countの結果をtotal変数に割り当てます。
これは、複雑な計算やデータベースクエリを一度だけ実行し、その結果を再利用する場合に便利です。
{% endcomment %} {% endcomment %}
{{ total }}employee{{ total|pluralize }}
{# total 変数の値を出力します #}
{# pluralize フィルタを使用して、totalが1より大きい場合、's' を追加します #}
{# 例:1 employee, 2 employees, 0 employees #} {#}
{% endwith %} {%}
{# with ブロックの終わりを表します。これ以降、total変数は使用できません #} {# with- データベースクエリの最小化を使用します:テンプレートで反復文を使うときは注意が必要です。 可能であれば、ビューであらかじめデータを処理してください。
セキュリティ上の考慮事項

Django Templateは基本的にXSS攻撃を防止するために自動でエスケープ処理をしてくれます。 しかし、Django Templateは セーフ フィルターを使用する際は注意が必要です。
{{ {{ user_input|safe }} 。仕上げ
Django Templateの深化機能について見てきましたが、どうでしたか?テンプレートの継承、カスタムタグとフィルター、そして最適化手法まで。これらの機能をうまく活用すれば、よりパワフルで効率的なDjangoアプリケーションを作ることができるでしょう。 ぜひ、実験して練習してみてください。あなたのDjangoスキルがさらにアップグレードされることでしょう!Django Templateの深化機能、楽しかったですか? これであなたのDjangoプロジェクトがもっと素敵なものになることでしょう。 頑張ってください!
#用語解説
- テンプレート継承: 基本テンプレートを作成し、他のテンプレートでこれを拡張して使用する技術
- カスタムタグ/フィルター: 開発者が直接作成したテンプレートタグやフィルター
- コンテキストを指定します:テンプレートに渡される変数の集合
- エスケープ: 特殊文字をHTMLエンティティに変換してXSS攻撃を防止するテクニック
- キャッシング: よく使われるデータをあらかじめ保存しておくことでパフォーマンスを向上させる手法







