djangoのカスタムテンプレートシステムを利用して自作の組み込みテンプレートタグを作成する方法を紹介します。
コンテンツ
組み込みテンプレートタグとは
一般的にはテンプレート側でviewsで行える処理を、テンプレート(html)側で行えるタグです。
以下のようにhtmlに、{%%}で囲ったタグを直接記述したりするタグを指します。
{%%}内部に書かれたものは、views側で書かれた処理になります。
どうして自作するのか?
ヒロヤンが自作に至った経緯としては、djangoの組み込みタグにtruncatecharsという文字列を指定された文字数以内に切り詰めるタグがあります。
文字数が指定された値より大きいときに文字列を切り詰め、末尾を省略記号 (“…”) に置き換えます。
引数: 切り詰める文字数
1 |
{{ value|truncatechars:6 }} |
例えばvalue=’HUNTER×HUNTER’だったら、
1 |
HUNTE… # 6文字 |
と表すことができます。
文字列が長い文章なんかをこのように指定するとレイアウトが綺麗におさまります。
しかしHUNTER×HUNTER 第3巻、HUNTER×HUNTER 第12巻、HUNTER×HUNTER 第20巻、と巻末も表示したくなったときに、truncatecharsだけでは対応できないことが判明し、自作をするに至りました。
イメージとしてはこんな感じで表示されて欲しいです。
1 2 3 4 |
HUNTER×HUN…3巻 HUNTER×HUN…12巻 HUNTER×HUN…30巻 |
それでは以下で早速方法を紹介していきます。
環境
環境は以下になります。
・OS Mac
・python 3.8
・django 2.2
組み込みテンプレートタグの作り方
ディレクトリ構造
組み込みテンプレートタグを作るには3つの設定をする必要があります。
- アプリ内にtemplatetagsディレクトリを作成
- templatetagsディレクトリ内に組み込みテンプレートタグのファイルを作成する。
実際に作成するとこのようなディレクトリ構造になります。
1 2 3 4 5 6 7 8 |
sample_apps/ __init__.py admin.py forms.py models.py views.py templatetags/ extra_tags.py |
テンプレート側でのコード
呼び出す時には必ずloadが必要で、また呼び出すモジュールを含むアプリケーション(この場合だとsample_apps)が必ずsettings.pyのinstalled_appsに含まれていなければなりません。
1 2 |
{% load extra_tags %} {% cut_book_name_start_end 'HUNTER×HUNTER 第20巻'%} |
自作の組み込みテンプレートタグの書き方例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from django import template register = template.Library() # Djangoテンプレートタグライブラリ @register.simple_tag def cut_book_name_start_end(str_book_name): ''' 本のタイトルが長い場合は省略して表示 ''' if len(book_name) >= 16: print('%s%s%s' % (book_name[:10], "...", book_name[-3:])) else: print(book_name) |
以上で準備完了です。
実際にこちらを表示すると、
1 |
HUNTER×HUN...20巻 |
このようにタイトルがほぼ見えて、巻数が見えるようになりました。
最後に
いかがでしたでしょうか。
このように自作の組み込みタグを作成することで、より柔軟な開発ができるようになります。
公式ドキュメントにも記述がありますので、是非組み合わせて自分だけのオリジナルのタグを作成してみてはいかがでしょうか。
以上、djangoで自作の組み込みテンプレートタグやフィルタを作成する方法、を紹介しました。
参考
https://djangoproject.jp/doc/ja/1.0/howto/custom-template-tags.html
https://docs.djangoproject.com/ja/2.1/ref/templates/builtins/
スクールを利用して本格的に学ぶ
いかがでしたでしょうか?
10人中9人が挫折すると言われるプログラミングを、ヒロヤンも実はプログラミングスクールで学習をしてきたからで、結果、今はPythonエンジニアとして働いています。
挫折率が高いプログラミングこそお金を払ってメンターを付けて、道を見失わないように環境を構築する必要があるのではないでしょうか。
これはダイエットで自分一人では痩せられないけど、トレーナーを付けて否が応でもせざるを得ない環境を作ると一緒ですね。
ヒロヤンもプログラミング勉強開始直後はあれこれ悩みましたが、悩むよりも手っ取り早くスクールに登録した方が最短ルートで勉強できるのではないかと考え、結果挫折せずに今に至っています。
今なら無料でキャリアカウンセリングを行っているCodeCamp(コードキャンプ)のようなプログラミングスクールもありますのでこれを機会に是非カウンセリングだけでも受けてみてはいかがでしょうか?
上記リンク先から無料相談ができます。
またこちら(↓)ではPython専用のプログラミングスクールをまとめ紹介しています。