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を使うときにパフォーマンスを上げる方法もあります。 いくつかのヒントを紹介します。

  1. テンプレートフラグメントキャッシング:頻繁に変更されない部分はキャッシュしておくといいですよ。
{%キャッシュをロードします %}
{# cache テンプレートタグライブラリを読み込みます #}

{% cache 500 sidebar %}
{# 500秒間、「sidebar」という名前で内部コンテンツをキャッシュします #}
{# キャッシュの期間中、後続のリクエストは保存されたバージョンを使用してパフォーマンスを向上させます #}

     <!
    {# この部分には、実際にキャッシュしたいテンプレートコードが入ります #}
    {# 例:データベースのクエリ結果、複雑な計算など #} <!

{% endcache %} {#
# キャッシュブロックの終わりを表します #} {#
  1. 不要なコンテキスト変数を削除: タグを使って複雑な変数を単純化することができます。
{% 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
  1. データベースクエリの最小化を使用します:テンプレートで反復文を使うときは注意が必要です。 可能であれば、ビューであらかじめデータを処理してください。

セキュリティ上の考慮事項

Django Templateは基本的にXSS攻撃を防止するために自動でエスケープ処理をしてくれます。 しかし、Django Templateは セーフ フィルターを使用する際は注意が必要です。

{{ {{ user_input|safe }}  。

仕上げ

Django Templateの深化機能について見てきましたが、どうでしたか?テンプレートの継承、カスタムタグとフィルター、そして最適化手法まで。これらの機能をうまく活用すれば、よりパワフルで効率的なDjangoアプリケーションを作ることができるでしょう。 ぜひ、実験して練習してみてください。あなたのDjangoスキルがさらにアップグレードされることでしょう!Django Templateの深化機能、楽しかったですか? これであなたのDjangoプロジェクトがもっと素敵なものになることでしょう。 頑張ってください!

#用語解説

  • テンプレート継承: 基本テンプレートを作成し、他のテンプレートでこれを拡張して使用する技術
  • カスタムタグ/フィルター: 開発者が直接作成したテンプレートタグやフィルター
  • コンテキストを指定します:テンプレートに渡される変数の集合
  • エスケープ: 特殊文字をHTMLエンティティに変換してXSS攻撃を防止するテクニック
  • キャッシング: よく使われるデータをあらかじめ保存しておくことでパフォーマンスを向上させる手法
테리 이모티콘
( 楽しくコーディングしましょう! )

類似の投稿