[Django] テンプレートで文字を切り詰めたい

最近のwebデザインでカード内に本文がちょっとだけ載っているデザインをよく目にします。
Djangoでも同じように表示させたいという願望のもとテンプレート内で文字列の切り詰め(トランケート)をしてみたいと思います。

文字列を切り詰める

具体的には以下のようにフィルターを適用することで切り詰めることができます。
文字数を20文字に切り詰める

{{ article.text|truncatechars_html:20 }}

コロン(:)の後ろについているのが実際に切り詰める文字数です。
上記の場合、切り詰められた文字列は後ろにつく"…“を含めて20文字
つまり、(20 - 3) + "..."になります。
指定した文字数に満たない場合は、特に切り詰められることもなく後ろに”…“が付くこともありません。

例えば、以下の二つの文字列をtruncatechars_htmlフィルターで10文字に切り詰めた場合、

  • "hello new world"
  • "hello"
{{ string|truncatechars_html:10 }}
  • "hello n..."
  • "hello" それぞれ上のようになります。
    十文字より長ければ切り詰められ、そうでなければ変化はありません。