こんばんはエンジニアの眠れない夜です。
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″ }}
こんな感じで文字列を取り出すことができます。
ここまで説明すればすぐにピンと来た方もいるでしょう。
スライスを使って取り出した最後の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 を使ってほぼ同等のことができる。
それでは楽しいプログラミングライフを!
コメントを残す