在Django模型中显示静态图像

时间:2015-05-07 01:09:39

标签: django django-models django-templates django-staticfiles django-settings

如果用户有个人资料图片,我想显示它。如果他/她没有个人资料照片,我想在其中显示默认图像。

有没有办法在Django模型属性中加载静态图像?

注意:用户的个人资料图片加载以下代码。包含默认图像的else语句不起作用。

这是我到目前为止所做的:

models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL)
    profile_picture = models.ImageField(upload_to='user/profile_pictures/', 
                                    null=False, 
                                    blank=False)

    @property
    def default_profile_picture(self):
        if self.profile_picture:
            return "%s/%s" %(settings.MEDIA_URL, self.profile_picture)
        else:
            return settings.STATIC_URL + 'img/default_profile_picture.jpg'

settings.py:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(BASE_DIR), "static", "static_dirs"),
)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static", "static_root")

提前感谢您的所有帮助!

1 个答案:

答案 0 :(得分:1)

您需要检查的一些事项:

  1. 您是否在 settings.py 文件中设置了MEDIA_ROOT和MEDIA_URL?

  2. 您指定了upload_to:

    upload_to='user/profile_pictures/'
    

    此路径是否在MEDIA_ROOT路径下? (即Django可以发现)

  3. 您必须通过在 urls.py 文件中添加以下行来告知Django提供静态文件:

    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns = [
        # ... the rest of your URLconf goes here ...
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

    上面的代码适用于Django 1.8。对于您的django版本,请阅读此处的文档:https://docs.djangoproject.com/en/1.8/howto/static-files/

  4. 在制作中,您应该让Apache或nginx服务器静态映像。步骤2中推荐的方法仅用于开发和测试目的。

  5. 如果您已完成上述所有步骤但仍然无效,请在呈现的网页中找到配置文件图片的链接,将其复制并粘贴到浏览器窗口中,然后查看出现的错误类型。