我正在使用django-imagekit调整用户头像的大小,现在显示默认头像(如果用户没有上传他/她的头像)我这样做:
views.py
try:
usr_avatar = UsrAvatar.objects.get(user=request.user.id)
except UsrAvatar.DoesNotExist:
usr_avatar = UsrAvatar.objects.get(id='0')
template.html
<img src="{{ usr_avatar.avatar_image.url }}" >
这样可以正常工作,但每次用户没有上传他/她的头像我都会在数据库中找到默认的头像图像。
当用户没有通过某种方式将默认图片链接归因于usr_avatar
或只是在template.html中执行某些操作时,是否有办法消除对数据库的影响?谢谢!
答案 0 :(得分:6)
Apt用户名给出了您的问题!
你可以创建一个context processor,为每个模板提供默认的头像,只需确保上下文处理器缓存图像
<强> settings.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')
但最后,最好避免在数据库中保留默认的头像,而只是编写上面的上下文处理器,而不是从数据库中获取默认头像,有一个静态网址到图像
from django.conf import settings
def default_avatar(request):
return {
'default_avatar' : '%simages/default_avatar.jpg' % settings.STATIC_URL
}