Django - 将静态图像上传为默认 ImageField 文件
Posted
技术标签:
【中文标题】Django - 将静态图像上传为默认 ImageField 文件【英文标题】:Django - uploading static image as default ImageField file 【发布时间】:2014-09-01 15:30:48 【问题描述】:这是我的models.py:
def get_profileImage_file_path(instance, filename):
return os.path.join('%s/uploadedPhotos/profileImages' % instance.user_id, filename)
class UserExtended(models.Model):
user = models.OneToOneField(User)
profileImage = models.ImageField(upload_to=get_profileImage_file_path, default='/static/images/myProfileIcon.png')
现在,我希望将默认图像(位于我的静态文件夹中)保存到
get_profileImage_file_path
功能。在我的 settings.py 中,我将 media_root 和 media_URL 定义为:
MEDIA_ROOT = '/home/username/Documents/aSa/userPhotos'
MEDIA_URL = '/media/'
由于某种原因,当我在模板和模板中传递用户对象时,如果这样做:
<img class='profilePic' src=" user.userextended.profileImage.url " height='120px' />
没有图像显示,当我在 chrome 中打开“检查元素”部分时,出现 404 错误:
GET http://127.0.0.1:8000/home/username/Documents/djcode/aS/aSa/static/images/myProfileIcon.png 404 (NOT FOUND)
即使这是图像的正确文件路径。 (我也不确定它为什么要给出整个文件路径,难道它不应该从 /static/ 开始吗?即使我“查看源代码”,整个 url 都在那里。)我该如何做到这一点位于静态文件夹中的默认图像上传到提供的路径
get_profileImage_file_path
功能?
【问题讨论】:
你解决了这个问题吗? 【参考方案1】:一般来说,我们对媒体使用如下配置:
BASE_DIR = dirname(dirname(abspath(__file__)))
MEDIA_ROOT_DIR = 'media'
MEDIA_ROOT = normpath(join(BASE_DIR, MEDIA_ROOT_DIR))
MEDIA_URL = '/media/'
为了,开发目的设置:
DEBUG = True
并在 urls.py 中添加以下内容:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
再次上传图片并验证图片,它现在应该可以工作了。
【讨论】:
以上是关于Django - 将静态图像上传为默认 ImageField 文件的主要内容,如果未能解决你的问题,请参考以下文章
Django CMS - 无法通过 cmsplugin_filer_image 上传图像
django cloudinary 通过 url 上传远程图像 - 文件名无效
Django rest 框架 - 将图像上传到 Azure 存储