在我的网站上,用户可以上传自己的个人资料照片。我通过在扩展了核心用户模型的UserProfile模型中使用ImageField来管理这些照片。以下是简化版本的UserProfile模型:
我正在使用PIL来创建上传图片的缩略图。
为了在我的模板中显示个人资料图片,我使用文档中推荐的
我正在处理的问题是,当用户将其帐户连接到Facebook并希望在我的网站上使用其Facebook个人资料图片作为其个人资料图片时。如何处理根据用户指定的设置显示用户上传的图像或其Facebook个人资料图片的最佳方法?如果我将Facebook个人资料图片的路径存储在“profile_picture”字段中,则必须在网站上显示每个个人资料图片之前进行检查,否则我会得到我的MEDIA_ROOT/MEDIA_URL预先添加到该图片的结果:
我的另一个选择是在上传图片时,将MEDIA_ROOT/MEDIA_URL添加到
然而,这两种选择都感觉像是hack的方式,我感觉一定有更有效率的方法来做到这一点。因此,我求助于SO,希望能够在这里获得一些启示和指导,了解最佳实践。
提前感谢您的帮助。
class UserProfile(models.Model):
picture = models.ImageField(upload_to='img', blank=True, null=True)
profile_picture = models.ImageField(upload_to='img', default='img/profile/default_profile.png', blank=True, null=True)
user = models.ForeignKey(User, unique=True)
我正在使用PIL来创建上传图片的缩略图。
为了在我的模板中显示个人资料图片,我使用文档中推荐的
url
函数,如下所示:{{ user.get_profile.profile_picture.url }}
我正在处理的问题是,当用户将其帐户连接到Facebook并希望在我的网站上使用其Facebook个人资料图片作为其个人资料图片时。如何处理根据用户指定的设置显示用户上传的图像或其Facebook个人资料图片的最佳方法?如果我将Facebook个人资料图片的路径存储在“profile_picture”字段中,则必须在网站上显示每个个人资料图片之前进行检查,否则我会得到我的MEDIA_ROOT/MEDIA_URL预先添加到该图片的结果:
/media/https://graph.facebook.com/[fbid]/picture
我的另一个选择是在上传图片时,将MEDIA_ROOT/MEDIA_URL添加到
profile_picture
字段中。不幸的是,这样做的唯一方式是在我的views.py文件中的add_profile_picture
函数中完成,因为Django默认存储图像路径时没有开始的正斜杠,并且如果您尝试打开相对路径以正斜杠开头的图像,则PIL会出现问题。但是,如果我预先添加完整的图像路径,我就不必在模板中使用url
函数,只需按以下方式显示图像即可,无论是上传的图像还是Facebook图像,都可以正确工作。{{ user.get_profile.profile_picture }}
然而,这两种选择都感觉像是hack的方式,我感觉一定有更有效率的方法来做到这一点。因此,我求助于SO,希望能够在这里获得一些启示和指导,了解最佳实践。
提前感谢您的帮助。