Python
 Computer >> コンピューター >  >> プログラミング >> Python

Djangoで独自のカスタムテンプレートフィルタを作成する方法

フィルタはDjango開発において非常に便利な機能です。Djangoには数多くの組み込みフィルタが用意されていますが、実は独自のカスタムフィルタを作成することもできます。一度作成すれば、プロジェクト内のどのテンプレートファイルからでも呼び出せるため、再利用性の高い処理をまとめるのに最適です。例えば、文字列を小文字から大文字に変換するといった処理も、フィルタとして簡単に実装できます。

この記事では、Djangoでカスタムテンプレートフィルタタグを作成し、実際にテンプレートで使用するまでの手順を解説します。それでは始めましょう。

実装例:カスタムフィルタの作成手順

まず、Djangoプロジェクトとアプリを作成しておいてください。

1. ディレクトリ構成の準備

アプリのルートディレクトリ直下に templates フォルダと templatetags フォルダを追加します。プロジェクト構成は以下のようになります。

Djangoで独自のカスタムテンプレートフィルタを作成する方法

ここで example がアプリ名、tutorial がプロジェクト名です。

ポイント: templatetags フォルダは必ずアプリディレクトリの直下に配置してください。また、後述する __init__.py を忘れるとフィルタが読み込まれません。

2. settings.py の設定

settings.py 内の TEMPLATES 変数が以下のようになっていることを確認してください。

import os
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'example/templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

続けて、同じく settings.pyINSTALLED_APPS"example" を追加します。これにより、アプリ内の templates フォルダや templatetags フォルダが認識されるようになります。

3. テンプレートとビューの作成

templates フォルダ内に home.html を作成します。内容は後ほど記述するので、今は空のままにしておきましょう。

次に、example アプリの views.py に以下のコードを追加します。

from django.shortcuts import render

# Create your views here.
def main(request):
    return render(request,"home.html")

ここではシンプルに、main ビューで home.html をレンダリングしているだけです。

4. URLの設定

プロジェクトの urls.py に以下のコードを追加します。

from django.contrib import admin
from django.urls import path, include
urlpatterns = [
    path('',include('example.urls')),
    path('admin/', admin.site.urls),
]

アプリ側の urls.py をメインの urls.py にインクルードしています。

さらに、example アプリ側の urls.py に以下を追加します。

from django.urls import path,include
from . import views
urlpatterns = [
    path('', views.main,name="main")
]

これで基本的なURLパスが設定され、main ビューが呼び出されるようになります。

5. カスタムフィルタの作成

templatetags フォルダ内に __init__.py(空ファイルでOK)を作成し、さらに upperfilter.py というフィルタ定義用ファイルを作成します。upperfilter.py に以下のコードを記述してください。

from django.template import Library

register=Library()

@register.filter
def upper(value):
    return value.upper()

ここでは Library をインポートして register インスタンスを作成し、upper という名前の関数(=フィルタ)を @register.filter デコレータを使って登録しています。各フィルタは少なくとも1つの値を受け取りますが、引数を追加することで複数の値を受け取るフィルタとして定義することも可能です。

6. テンプレートでフィルタを使用する

home.html に戻り、以下のコードを記述します。

<!DOCTYPE html>
<html>
    <head>
        <title>Tut</title>
    </head>
    <body>
        {% load upperfilter %}
        <h1>{{"hi friends how are you" | upper}}</h1>
    </body>
</html>

フロントエンド側では、まず {% load upperfilter %} で自作フィルタを読み込み、その後 <h1> 要素の中でパイプ(|)を使ってフィルタを適用しています。

このフィルタにより、小文字の文字列がすべて大文字に変換されて表示されます。

出力結果

フィルタ適用前:

Djangoで独自のカスタムテンプレートフィルタを作成する方法

フィルタ適用後:

Djangoで独自のカスタムテンプレートフィルタを作成する方法

まとめ

Djangoのカスタムフィルタを使えば、テンプレート内での文字列変換やデータ整形などを自由に拡張できます。作成手順は「templatetagsフォルダの作成 → フィルタ関数の定義と登録 → テンプレートでload」の3ステップだけなので、ぜひ自分のプロジェクトでも試してみてください。なお、templatetags フォルダを新規作成・変更した場合は、開発サーバーの再起動が必要になる点に注意しましょう。

  1. 自分の手書き文字をそのままPCフォントに!カスタムフォントの簡単な作り方

    このガイドでは、自分の手書き文字をもとに、パソコンで使えるオリジナルフォントを作成する方法をご紹介します。「YourFonts.com」というオンラインサービスを利用すれば、わずか数分で自分だけのTrueTypeフォントを作ることができます。作成手順は驚くほどシンプルまず、公式サイトからPDFテンプレートをダウンロードして印刷します。次に、各マスにアルファベットや数字、記号を手書きで記入しましょう。あとは記入済みのテンプレートをスキャンしてアップロードするだけで完了です。購入前にフォントのプレビューを確認でき、必要に応じて微調整を行うことも可能です。料金は9.95ドルと手頃な価格設定で、購入後

  2. 自分専用のクラウドPCを構築する方法【Paperspace+Parsec活用ガイド】

    どこからでもアクセスできるパソコンが欲しいと思ったことはありませんか?そんなときに便利なのが「クラウドPC」です。外出先から自分のファイルにアクセスできるだけでなく、高性能なゲーミングPCをレンタルすれば、今のマシンでは到底動かせないようなゲームも快適にプレイできます。 さらに、レンタルしたクラウドPCを自分好みにカスタマイズできたら理想的ですよね。実は、オンラインサービスと「Parsec」というアプリを組み合わせれば、それが簡単に実現できるのです。 クラウドPCのセットアップ手順 まずは、クラウドPCを利用できるサービスを選びましょう。Amazon AWSなど選択肢は多数ありますが、この記