From 0e87dc2f8263925bc8a5eb79688101cb3af7e848 Mon Sep 17 00:00:00 2001 From: reidransom Date: Sat, 29 Oct 2016 15:09:57 -0400 Subject: [PATCH 1/3] Allow provider to override template_name and context Also an example provider which renders the user's initals against a randomly colored background. --- avatar/providers.py | 23 +++++++++++++++++++++++ avatar/templates/avatar/initials.html | 12 ++++++++++++ avatar/templatetags/avatar_tags.py | 11 +++++++++-- 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 avatar/templates/avatar/initials.html 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 From 55be600311844b470baed376572fe7b3d734e0c3 Mon Sep 17 00:00:00 2001 From: reidransom Date: Sat, 29 Oct 2016 15:26:36 -0400 Subject: [PATCH 2/3] lint fixes --- avatar/providers.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/avatar/providers.py b/avatar/providers.py index 4c9508b..c72ef75 100644 --- a/avatar/providers.py +++ b/avatar/providers.py @@ -34,7 +34,7 @@ class DefaultAvatarProvider(object): """ @classmethod - def get_avatar_url(self, user, size): + def get_avatar_url(cls, user, size): return get_default_avatar_url() @@ -44,7 +44,7 @@ class PrimaryAvatarProvider(object): """ @classmethod - def get_avatar_url(self, user, size): + def get_avatar_url(cls, user, size): avatar = get_primary_avatar(user, size) if avatar: return avatar.avatar_url(size) @@ -56,7 +56,7 @@ class GravatarAvatarProvider(object): """ @classmethod - def get_avatar_url(self, user, size): + def get_avatar_url(cls, user, size): params = {'s': str(size)} if settings.AVATAR_GRAVATAR_DEFAULT: params['d'] = settings.AVATAR_GRAVATAR_DEFAULT @@ -74,7 +74,7 @@ class FacebookAvatarProvider(object): """ @classmethod - def get_avatar_url(self, user, size): + def get_avatar_url(cls, user, size): fb_id = get_facebook_id(user) if fb_id: url = 'https://graph.facebook.com/{fb_id}/picture?type=square&width={size}&height={size}' @@ -84,24 +84,23 @@ class FacebookAvatarProvider(object): ) -class InitialsAvatarProvider: +class InitialsAvatarProvider(object): """ 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): + @classmethod + def get_avatar_url(cls, 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, + 'fontsize': (size * 1.1) / 2, 'initials': initials, 'hue': user.pk % 360, 'saturation': '65%', 'lightness': '60%', } return ('avatar/initials.html', context) - - From c8bcdb4a0c8a1cf684bbd9d8ba3e7ba54f2f88ef Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 10 Aug 2022 15:45:56 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- avatar/providers.py | 12 ++++++------ avatar/templates/avatar/initials.html | 1 - 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/avatar/providers.py b/avatar/providers.py index 969fad6..0d5aae8 100644 --- a/avatar/providers.py +++ b/avatar/providers.py @@ -88,10 +88,10 @@ class InitialsAvatarProvider(object): initials = user.username[:1] initials = initials.upper() context = { - 'fontsize': (size * 1.1) / 2, - 'initials': initials, - 'hue': user.pk % 360, - 'saturation': '65%', - 'lightness': '60%', + "fontsize": (size * 1.1) / 2, + "initials": initials, + "hue": user.pk % 360, + "saturation": "65%", + "lightness": "60%", } - return ('avatar/initials.html', context) + return ("avatar/initials.html", context) diff --git a/avatar/templates/avatar/initials.html b/avatar/templates/avatar/initials.html index 9b1e044..12f4930 100644 --- a/avatar/templates/avatar/initials.html +++ b/avatar/templates/avatar/initials.html @@ -9,4 +9,3 @@ {{ kwargs.style }}' {% for key, value in kwargs.items %}{% if key != 'style' %}{{ key }}="{{ value }}" {% endif %}{% endfor %}> {{ initials }} -