diff --git a/djblets/gravatars/__init__.py b/djblets/gravatars/__init__.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1ee92bed987c8d68ef99715474545a61481b73b2 100644
--- a/djblets/gravatars/__init__.py
+++ b/djblets/gravatars/__init__.py
@@ -0,0 +1,61 @@
+#
+# __init__.py -- Gravatar functionality
+#
+# Copyright (c) 2012       Beanbag, Inc.
+# Copyright (c) 2008-2009  Christian Hammond
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+from md5 import md5
+
+
+def get_gravatar_url(request, user, size=None):
+    from django.conf import settings
+
+    if user.is_anonymous() or not user.email:
+        return ""
+
+    email = user.email.strip().lower()
+    email_hash = md5(email).hexdigest()
+
+    if request.is_secure():
+        scheme = 'https'
+    else:
+        scheme = 'http'
+
+    url = "%s://www.gravatar.com/avatar/%s" % (scheme, email_hash)
+    params = []
+
+    if not size and hasattr(settings, "GRAVATAR_SIZE"):
+        size = settings.GRAVATAR_SIZE
+
+    if size:
+        params.append("s=%s" % size)
+
+    if hasattr(settings, "GRAVATAR_RATING"):
+        params.append("r=%s" % settings.GRAVATAR_RATING)
+
+    if hasattr(settings, "GRAVATAR_DEFAULT"):
+        params.append("d=%s" % settings.GRAVATAR_DEFAULT)
+
+    if params:
+        url += "?" + "&".join(params)
+
+    return url
diff --git a/djblets/gravatars/templatetags/gravatars.py b/djblets/gravatars/templatetags/gravatars.py
index b2f9e4d20f0211297ca6260bbe0567c70137e41a..a147fd2173459eb347746c99bbbafbc34e3b0f01 100644
--- a/djblets/gravatars/templatetags/gravatars.py
+++ b/djblets/gravatars/templatetags/gravatars.py
@@ -22,17 +22,18 @@
 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-from md5 import md5
-
 from django import template
-from django.conf import settings
+
+from djblets.gravatars import get_gravatar_url
+from djblets.util.decorators import basictag
 
 
 register = template.Library()
 
 
-@register.simple_tag
-def gravatar(user, size=None):
+@register.tag
+@basictag(takes_context=True)
+def gravatar(context, user, size=None):
     """
     Outputs the HTML for displaying a user's gravatar.
 
@@ -48,29 +49,10 @@ def gravatar(user, size=None):
 
     See http://www.gravatar.com/ for more information.
     """
-    if user.is_anonymous() or not user.email:
-        return ""
-
-    email = user.email.strip().lower()
-    email_hash = md5(email).hexdigest()
-
-    url = "http://www.gravatar.com/avatar/%s" % email_hash
-    params = []
-
-    if not size and hasattr(settings, "GRAVATAR_SIZE"):
-        size = settings.GRAVATAR_SIZE
-
-    if size:
-        params.append("s=%s" % size)
-
-    if hasattr(settings, "GRAVATAR_RATING"):
-        params.append("r=%s" % settings.GRAVATAR_RATING)
-
-    if hasattr(settings, "GRAVATAR_DEFAULT"):
-        params.append("d=%s" % settings.GRAVATAR_DEFAULT)
-
-    if params:
-        url += "?" + "&".join(params)
+    url = get_gravatar_url(context['request'], user, size)
 
-    return '<img src="%s" width="%s" height="%s" alt="%s"/>' % \
-           (url, size, size, user.get_full_name() or user.username)
+    if url:
+        return '<img src="%s" width="%s" height="%s" alt="%s"/>' % \
+               (url, size, size, user.get_full_name() or user.username)
+    else:
+        return ''
