Djangoメモ(35) : Gravatarを表示する独自テンプレートフィルタを作成
A Complete Beginner's Guide to Djangoのチュートリアルを参考にGravatarを表示する独自テンプレートフィルタを作成してみる。
Gravatar
Gravatarとは「グローバルに認識されるアバター」という意味でブログやコメントを投稿する際に名前の側に表示される画像のこと。
下記リンクで登録できる。
Gravatar - グローバルに認識されるアバター (Globally Recognized Avatars)
開発者向けのページには各言語でのコードサンプルがあり、Pythonでの実装例は下記コード。
# import code for encoding urls and generating md5 hashes import urllib, hashlib # Set your variables here email = "someone@somewhere.com" default = "https://www.example.com/default.jpg" size = 40 # construct the url gravatar_url = "https://www.gravatar.com/avatar/" + hashlib.md5(email.lower()).hexdigest() + "?" gravatar_url += urllib.urlencode({'d':default, 's':str(size)})
独自テンプレートフィルタ
それでは独自テンプレートフィルタをboards/templatetags/gravatar.pyに作成してみる。
import hashlib from urllib.parse import urlencode from django import template from django.conf import settings register = template.Library() @register.filter def gravatar(user): email = user.email.lower().encode('utf-8') default = 'mm' size = 256 url = 'https://www.gravatar.com/avatar/{md5}?{params}'.format( md5=hashlib.md5(email).hexdigest(), params=urlencode({'d': default, 's': str(size)}) ) return url
urlはhttps://www.gravatar.com/avatar/e64d7d89f26bd1972efa854d13d7dd61?d=mm&s=256のような文字列になる。
これで|gravatarというフィルタが使えるようになったのでtemplates/topic_posts.htmlを以下のように編集する。
{% extends 'base.html' %}
{% load gravatar %}
{% block content %}
<!-- code suppressed -->
<img src="{{ post.created_by|gravatar }}" alt="{{ post.created_by.username }}" class="w-100 rounded">
<!-- code suppressed -->
{% endblock %}
問題がなければ以下のようにGravatarが表示される。
ユーザーのEメール情報をもとにGravatarが表示されるので正しく表示されない場合はメールアドレスを要確認。

なお、独自テンプレートタグ、フィルタの作成方法については下記記事を参照。
まとめ
- Gravatarを表示する独自テンプレートフィルタを作成
{% load gravatar %}でロードして|gravatarフィルタを指定