【Tips】Djangoテンプレートタグとフィルター - 役立つコードスニペット
By JoeVu, at: 2023年8月29日15:59
Estimated Reading Time: __READING_TIME__ minutes
![[Tips] Django TemplateTag and Filter - Useful Code Snippet](/media/filer_public_thumbnails/filer_public/d8/c4/d8c494f5-6613-4b8a-91ac-b88eded0f5d3/django_templatetag_filter.png__1500x900_crop_subsampling-2_upscale.png)
![[Tips] Django TemplateTag and Filter - Useful Code Snippet](/media/filer_public_thumbnails/filer_public/d8/c4/d8c494f5-6613-4b8a-91ac-b88eded0f5d3/django_templatetag_filter.png__400x240_crop_subsampling-2_upscale.png)
Djangoでは、テンプレートタグとフィルタは、テンプレート内で動的なコンテンツを操作および表示するための必須ツールです。
最も一般的に使用されるテンプレートタグとフィルタをいくつか紹介します。
組み込みタグとフィルタ
テンプレートタグ
- {% for %}: リスト、クエリセット、その他の反復可能なデータのループに使用します。
- {% if %}: 特定の条件に基づいてコンテンツを表示するための条件文です。
- {% include %}: 別のテンプレートファイルの内容を現在のテンプレートに含めます。
- {% block %}と{% extends %}: テンプレート継承の作成と拡張に使用します。
- {% url %}: ビュー名とそのパラメータに基づいてURLを生成します。
- {% csrf_token %}: フォームのCSRFトークンを出力します。
- {% with %}: テンプレートコンテキスト内で変数に値を代入します。
フィルタ
- {{ variable|default:"Default Value" }}: 変数が定義されていない場合、デフォルト値を表示します。
- {{ variable|length }}: リスト、クエリセット、または文字列の長さを返します。
- {{ variable|date:"format" }}: 指定された形式に従って日付をフォーマットします。
- {{ variable|linebreaks }}: 改行をHTML改行に変換します。
- {{ variable|urlize }}: テキスト内のURLをクリック可能なリンクに変換します。
- {{ variable|truncatechars:num }}: 文字列を指定された文字数に切り詰めます。
- {{ variable|lower }}: テキストを小文字に変換します。
- {{ variable|upper }}: テキストを大文字に変換します。
- {{ variable|slugify }}: テキストをURLセーフなスラッグに変換します。
- {{ variable|safe }}: エスケープを防ぐためにコンテンツを安全なHTMLとしてマークします。
- {{ variable|floatformat }}: 浮動小数点数をフォーマットします。
カスタマイズされたタグとフィルタ
1. Get Item
一部の辞書には、スペースを含むキーがあり、これらのキー値にアクセスする際に多くの問題を引き起こす可能性があります。
def get_item(dict, key):
return dict.get(key, 0)
2. 電話番号の非表示
これは、電話番号、メールアドレス、クレジットカード情報などの機密データを非表示にするのに役立ちます。
def hide_phone_number(string, member=None):
try:
return '{}***'.format(string[:-3])
except Exception:
return ''
3. 人間が読める日時
def humanize_timedelta(timedelta_obj):
secs = timedelta_obj.total_seconds()
hours = 0
minutes = 0
seconds = 0
if secs > 3600:
hours = secs // 3600
secs = secs - hours * 3600
if secs > 60:
minutes = secs // 60
secs = secs - minutes * 60
if secs > 0:
seconds = secs
return "%02d:%02d:%02d" % (hours, minutes, seconds)
テンプレートタグやフィルタと同様に、テンプレートレンダリングを使用して、HTMLコンテンツをテンプレートに適用することもできます。例:
def boolean_checkbox(value):
if value:
return ''
return ''