gpt4 book ai didi

Django:在 ImageField 中存储相对和绝对图像路径

转载 作者:行者123 更新时间:2023-12-02 02:22:43 40 4
gpt4 key购买 nike

在我的网站上,用户可以上传他们自己的个人资料图片,我通过扩展核心用户模型的 UserProfile 模型中的 ImageField 对其进行管理。这是 UserProfile 模型的简化版本:

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 以获得有关最佳实践的一些灵感/指导。

预先感谢您的帮助。

最佳答案

几种可能性:

  1. 写入时,覆盖save() 并在写入数据库之前将给定值修改为所需值,或者
  2. 在读取时,创建一个方法来检查存储的值并将其调整为适当的模式。应用 @property 装饰器,以便您可以直接从模板访问它

我可能会补充说,在我自己的战斗中(相同但不同),我完全放弃了 ImageField 以支持 CharField 并让上面的例程处理独特的成像细节(例如:缩略图)。

关于Django:在 ImageField 中存储相对和绝对图像路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7410644/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com