给出您的问题的 Apt 用户名!
您可以创建一个上下文处理器,为每个模板提供默认头像,并确保上下文处理器缓存图像
设置.py
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myapp.context_processors.default_avatar',
...
)
myapp/context_processors.py
from django.core.cache import cache
def default_avatar(request):
default_avatar = cache.get('default_avatar', False)
if not default_avatar:
default_avatar = UsrAvatar.object.get(id='0')
return {
'default_avatar' : default_avatar
}
现在模板变量“default_avatar”在每个模板中都可用:
{% if usr_avatar %}
{{ usr_avatar }}
{% else %}
{{ default_avatar }}
{% endif %}
或者,只需在原始查询中使用缓存:
try:
usr_avatar = UsrAvatar.objects.get(user=request.user.id)
except UsrAvatar.DoesNotExist:
usr_avatar = cache.get('default_avatar', False)
if not usr_avatar:
usr_avatar = UsrAvatar.objects.get(id='0')
但最后,最好完全避免将默认头像保留在数据库中,而只需编写一个像上面这样的上下文处理器,而不是从数据库中获取默认头像,只需要有一个图片的静态 url
from django.conf import settings
def default_avatar(request):
return {
'default_avatar' : '%simages/default_avatar.jpg' % settings.STATIC_URL
}