【问题标题】:django-imagekit - better way of showing a default image?django-imagekit - 显示默认图像的更好方法?
【发布时间】:2011-12-22 16:02:39
【问题描述】:

我正在使用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 中执行某些操作来消除对数据库的访问?谢谢!

【问题讨论】:

    标签: django django-templates django-views django-imagekit


    【解决方案1】:

    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
        }
    

    【讨论】:

    • @pastylegs 静态链接解决方案会是什么样子?谢谢!
    • 好吧,任何静态媒体都由您的 Web 服务器提供服务,所以您真正要做的就是提供您将用作默认头像的图像的路径,因此在上下文处理器中只需返回一个服务器上默认图像头像的路径
    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2015-11-16
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多