diff --git a/avatar/templatetags/avatar_tags.py b/avatar/templatetags/avatar_tags.py index 50f9b08..b52d810 100644 --- a/avatar/templatetags/avatar_tags.py +++ b/avatar/templatetags/avatar_tags.py @@ -32,6 +32,7 @@ def avatar_url(user, size=AVATAR_DEFAULT_SIZE): else: return get_default_avatar_url() + @cache_result @register.simple_tag def avatar(user, size=AVATAR_DEFAULT_SIZE): @@ -48,18 +49,13 @@ def avatar(user, size=AVATAR_DEFAULT_SIZE): url = avatar_url(user, size) return """%s""" % (url, alt, size, size) - - + + @register.filter def has_avatar(user): if not isinstance(user, User): return False - else: - avatar = Avatar.objects.filter(user=user, primary=True) - if avatar: - return True - else: - return False + return Avatar.objects.filter(user=user, primary=True).exists() @cache_result @@ -67,15 +63,16 @@ def has_avatar(user): def primary_avatar(user, size=AVATAR_DEFAULT_SIZE): """ This tag tries to get the default avatar for a user without doing any db - requests. It achieve this by linking to a special view that will do all the + requests. It achieve this by linking to a special view that will do all the work for us. If that special view is then cached by a CDN for instance, we will avoid many db calls. """ alt = unicode(user) - url = reverse('avatar_render_primary', kwargs={'user' : user, 'size' : size}) + url = reverse('avatar_render_primary', kwargs={'user': user, 'size': size}) return """%s""" % (url, alt, size, size) + @cache_result @register.simple_tag def render_avatar(avatar, size=AVATAR_DEFAULT_SIZE): @@ -92,11 +89,12 @@ def primary_avatar_object(parser, token): else: raise template.TemplateSyntaxError('%r tag takes three arguments.' % split[0]) + class UsersAvatarObjectNode(template.Node): def __init__(self, user, key): self.user = template.Variable(user) - self.key = key - + self.key = key + def render(self, context): user = self.user.resolve(context) key = self.key