2012-10-26 155 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