2012-10-26 67 views
2

我在models.py中用默認圖像定義了一個ImageField。每次我創建一個新用戶時,我都可以在管理員中看到默認圖像與用戶關聯,如我所願。渲染默認圖像,Django

的問題是,當我嘗試呈現在我的模板,喜歡的東西:

{{user.userprofile.profilpic.url}} 

這是行不通的。圖像不顯示。

但是,如果我進入我的管理員並手動更改它,即使使用完全相同的圖像,它也可以工作。它看起來像創建用戶時圖像沒有保存到數據庫中。

這裏是我的models.py:

class UserProfile(FacebookProfileModel): 
     user = models.OneToOneField(User) 
     profilpic = models.ImageField(upload_to="profilpics/", default="/my/picture.jpeg") 

我不知道如何可以解決這個問題。感謝您的幫助。

回答

2

您可以添加一個方法到模型:

class UserProfile(FacebookProfileModel): 
    ... 
    profilepic = ... 

    def profilepic_or_default(self, default_path="/images/..."): 
     if self.profilepic: 
      return self.profilepic 
     return default_path 

,並在您tempalte使用它:

{{ myuser.profilepic_or_default }} 
+0

謝謝,它完美的作品。但我意識到我最初的錯誤是我把絕對路徑放在「default = ..」之後,而它應該是「MEDIA_URL」之後的路徑。 – JojoL

3

您可以使用default templatefilter

{% with default_image=STATIC_URL|add:"default_image.jpg" %} 
    {{ user.userprofile.profilpic.url|default:default_image }} 
{% endwith %} 
+1

這是一個非常好方法:)! – Jingo

+0

我喜歡蒂姆的更好:D – jpic

+2

當然,蒂姆的解決方案是在那裏它屬於。但我喜歡你背後的創意:)... – Jingo