In a Django template I have a pinterest style feed, and at the bottom of each block there’s an avatar pic.
I’m using the following template tag to show the avatar pic:
{% avatar user 40 %}
def avatar(user, size=80):
if not isinstance(user, User):
try:
user = User.objects.get(username=user)
alt = unicode(user)
url = avatar_url(user, size)
except User.DoesNotExist:
url = AVATAR_DEFAULT_URL
alt = _("Default Avatar")
else:
alt = unicode(user)
url = avatar_url(user, size)
picpath= """<img src="%s" alt="%s" width="%s" height="%s" />""" % (url, alt,
size, size)
return picpath
The problem is that this templatetag makes a call to the database each time to pull out the path to the avatar pic.
Basically what I want to do is only make this call the minimum number of times required (ie. extract the unique users in the current view and only get those pics once)
Is there a way to do this in the template? Or would I have to basically change my view in order to do this?
You probably want to use a cache. You can use template fragment caching to cache the call to the
avatartag:You can also do caching in the view: either the whole view, or just cache your results. But template caching is probably easiest.