Django テンプレートフィルター(タグ)でends_withをする方法

Django テンプレートフィルター(タグ)でends_withをする方法

こんばんはエンジニアの眠れない夜です。

Djangoのテンプレート(タグ)で ends_with を使いたいことがありますよね?

そんな時にテンプレートフィルターの一覧を確認してもends_with のフィルターが存在しないことがわかります。

 

そこでテンプレートフィルターを自分で作ってends_with を追加するという方法があります。

そういう設定をしたい方はこちらの記事が参考になります。

 

ですが、「テンプレートフィルターを自分で作るのはめんどくさい!」 と感じる方も多いはずです。

そんな方のために ends_with と同等のことを既存のテンプレートフィルターを使ってできる方法を紹介します。

ends_with とほぼ同等のことができる? slice

Djangoには slice というテンプレートフィルターが用意されています。

これは文字列やリストの1部を取り出すためのフィルターです。 Pythonで使っているスライスと考え方は同じです。

最初の2文字を取り出す
{{ some_text|slice:”:2″ }}

最後の2文字を取り出す
{{ some_text|slice:”-2″ }}

Django公式ドキュメント slice

こんな感じで文字列を取り出すことができます。

ここまで説明すればすぐにピンと来た方もいるでしょう。
スライスを使って取り出した最後のN文字と同じかを確認すればいいだけです。

最後の3文字が yes ならTrue
{% if some_text|slice:”-3″ == “yes” %}

たったこれだけでends_withとほぼ同等のことができます。

大文字、小文字が混ざっているテキストを扱う場合には lower を先に実行してから slice に渡すといいでしょう。

{% if some_text|lower|slice:”-3″ == “yes” %}

starts_with を実行したい場合

ここまでくれば説明する必要もないかもしれませんが、starts_with もスライスで切り取り先を変えれば同じ方法で書けます。

最初の3文字が yes なら True
{% if some_text|slice:”:3″ == “yes” %}

まとめ

  • Djangoのテンプレートフィルタに `ends_with` は無い。
  • ends_withと同じ動きをするテンプレートタグを自分で作って追加できる。
  • starts_with と ends_with は slice を使ってほぼ同等のことができる。

それでは楽しいプログラミングライフを!

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください