2011-11-05 29 views
4

我使用django-imagekit來調整我的用戶頭像和現在顯示默認的頭像(如果用戶沒有上傳他/她的頭像)我這樣做: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 }}" > 

這工作正常,但每次用戶沒有上傳他/她的頭像我打了databa se用於默認的頭像圖像。

當用戶沒有通過某種方式加載的默認圖像鏈接歸因於usr_avatar或只是在template.html中做某件事情時,有沒有辦法消除數據庫?謝謝!

回答

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 
    } 

現在TEM板變量「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 
    } 
+0

+1很酷,想弄明白。 – pcx

+0

@pastylegs靜態鏈接解決方案將如何看起來像?謝謝! – avatar

+0

好吧,任何靜態媒體都是由你的網絡服務器提供的,所以你所做的只是提供你要用作默認化身的圖像的路徑,所以在上下文中處理器只需將服務器上的路徑返回到默認值圖像頭像 –