在Django模板中,我有一个pinterest样式的feed,在每个块的底部有一个头像pic。
我正在使用以下模板标签来显示头像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
问题是这个模板标签每次都会调用数据库来拉出头像pic的路径。
基本上我想要做的只是将此调用设置为所需的最少次数(即,在当前视图中提取唯一用户并且只获取一次这些图片)
有没有办法在模板中执行此操作?或者我是否必须基本上改变我的观点才能做到这一点?
答案 0 :(得分:2)
您可能想要使用cache。您可以使用template fragment caching来缓存对avatar
代码的调用:
{% load cache %}
{# Cache for 60 seconds; you can use any value you want here #}
{% cache 60 avatars %}
{% avatar user 40 %}
{% endcache %}
您还可以在视图中执行缓存:whole view或cache your results。但模板缓存可能是最简单的。