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

时间:2014-07-11 05:04:32

标签: 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')

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

中给出的路径
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中的'inspect element'部分时,它会出现404错误:

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

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

中提供的路径
get_profileImage_file_path

功能

1 个答案:

答案 0 :(得分:2)

一般情况下,我们对媒体使用如下配置:

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)

再次上传图片并验证图片,现在应该可以使用。