diff --git a/avatar/providers.py b/avatar/providers.py index 7b4c5bb..4c9508b 100644 --- a/avatar/providers.py +++ b/avatar/providers.py @@ -82,3 +82,26 @@ class FacebookAvatarProvider(object): fb_id=fb_id, size=size ) + + +class InitialsAvatarProvider: + """ + Returns a tuple with template_name and context for rendering the given user's avatar as their + initials in white against a background with random hue based on their primary key. + """ + + def get_avatar_url(user, size): + initials = user.first_name[:1] + user.last_name[:1] + if not initials: + initials = user.username[:1] + initials = initials.upper() + context = { + 'fontsize': (size*1.1)/2, + 'initials': initials, + 'hue': user.pk % 360, + 'saturation': '65%', + 'lightness': '60%', + } + return ('avatar/initials.html', context) + + diff --git a/avatar/templates/avatar/initials.html b/avatar/templates/avatar/initials.html new file mode 100644 index 0000000..9b1e044 --- /dev/null +++ b/avatar/templates/avatar/initials.html @@ -0,0 +1,12 @@ + + {{ initials }} + diff --git a/avatar/templatetags/avatar_tags.py b/avatar/templatetags/avatar_tags.py index 1066b96..ac0af5a 100644 --- a/avatar/templatetags/avatar_tags.py +++ b/avatar/templatetags/avatar_tags.py @@ -44,12 +44,19 @@ def avatar(user, size=settings.AVATAR_DEFAULT_SIZE, **kwargs): url = avatar_url(user, size) context = { 'user': user, - 'url': url, 'alt': alt, 'size': size, 'kwargs': kwargs, } - return render_to_string('avatar/avatar_tag.html', context) + template_name = 'avatar/avatar_tag.html' + ext_context = None + try: + template_name, ext_context = url + except ValueError: + context['url'] = url + if ext_context: + context = dict(context, **ext_context) + return render_to_string(template_name, context) @register.filter