7

这是我的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' alt="" /> 

没有图像显示,当我在 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

功能?

4

1 回答 1

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)

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

于 2015-02-09T11:47:51.383 回答