如果用户有个人资料图片,我想显示它。如果他/她没有个人资料照片,我想在其中显示默认图像。
有没有办法在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")
提前感谢您的所有帮助!
答案 0 :(得分:1)
您需要检查的一些事项:
您是否在 settings.py 文件中设置了MEDIA_ROOT和MEDIA_URL?
您指定了upload_to:
upload_to='user/profile_pictures/'
此路径是否在MEDIA_ROOT路径下? (即Django可以发现)
您必须通过在 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/
在制作中,您应该让Apache或nginx服务器静态映像。步骤2中推荐的方法仅用于开发和测试目的。
如果您已完成上述所有步骤但仍然无效,请在呈现的网页中找到配置文件图片的链接,将其复制并粘贴到浏览器窗口中,然后查看出现的错误类型。