def render(self, context): # If size is not an int, then it's a Variable, so try to resolve it. if not isinstance(self.size, int): self.size = int(self.size.resolve(context)) if not self.size in AVATAR_SIZES: return '' try: user = self.user.resolve(context) avatar = Avatar.objects.get(user=user, valid=True).image if hasattr(settings, "AWS_SECRET_ACCESS_KEY"): avatar_path = avatar.name else: avatar_path = avatar.path if not storage.exists(avatar_path): raise base, filename = os.path.split(avatar_path) name, extension = os.path.splitext(filename) filename = os.path.join(base, "%s.%s%s" % (name, self.size, extension)) url_tuple = urlparse.urlparse(avatar.url) url = urlparse.urljoin(urllib.unquote(urlparse.urlunparse(url_tuple)), "%s.%s%s" % (name, self.size, extension)) if not storage.exists(filename): thumb = Image.open(ContentFile(avatar.read())) thumb.thumbnail((self.size, self.size), Image.ANTIALIAS) f = StringIO() thumb.save(f, "JPEG") f.seek(0) storage.save(filename, ContentFile(f.read())) except: avatar_path = DEFAULT_AVATAR base, filename = os.path.split(avatar_path) generic, extension = os.path.splitext(filename) filename = os.path.join(base, "%s.%s%s" % (generic, self.size, extension)) # Fallback to Gravatar if enabled if gravatar and user: url = gravatar_for_user(user, self.size) else: url = filename.replace(settings.MEDIA_ROOT, settings.MEDIA_URL) url = os.path.normpath(url) return url
def get_user_image(user, size=80): url = gravatar_for_user(user, size) return '<img src="%s" alt="%s" height="%s" width="%s" />' % ( url, user.username, size, size)