Django - 将静态图像上传为默认的ImageField文件

use*_*875 6 django django-models django-file-upload

这是我的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')
Run Code Online (Sandbox Code Playgroud)

现在,我希望默认图像(在我的静态文件夹中)保存到给定的路径中

get_profileImage_file_path
Run Code Online (Sandbox Code Playgroud)

功能.在我的settings.py中,我将media_root和media_URL定义为:

MEDIA_ROOT = '/home/username/Documents/aSa/userPhotos'

MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我在模板和模板中传递用户对象时,如果我这样做:

<img class='profilePic' src="{{ user.userextended.profileImage.url }}" height='120px' alt="" /> 
Run Code Online (Sandbox Code Playgroud)

没有图像显示,当我打开chrome中的'inspect element'部分时,它会出现404错误:

GET http://127.0.0.1:8000/home/username/Documents/djcode/aS/aSa/static/images/myProfileIcon.png 404 (NOT FOUND)  
Run Code Online (Sandbox Code Playgroud)

即使这是图像的正确文件路径.(我也不确定它为什么要提供整个文件路径,是不是它应该从/ static /开始?即使我'查看源',整个网址都在那里.)我怎样才能这样做位于静态文件夹中的默认图像上传到中提供的路径

get_profileImage_file_path
Run Code Online (Sandbox Code Playgroud)

功能?

小智 1

一般来说,我们对媒体使用如下配置:

BASE_DIR = dirname(dirname(abspath(__file__)))

MEDIA_ROOT_DIR = 'media'
MEDIA_ROOT = normpath(join(BASE_DIR, MEDIA_ROOT_DIR))
MEDIA_URL = '/media/'
Run Code Online (Sandbox Code Playgroud)

为此,设定的开发目的:

DEBUG = True
Run Code Online (Sandbox Code Playgroud)

并在 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)
Run Code Online (Sandbox Code Playgroud)

再次上传图像并验证图像,它现在应该可以工作了。