将图像保存到用户模型中

时间:2016-06-26 18:11:08

标签: python django imagefield

我正在尝试在我的用户模型中创建一个“avatar”字段(尝试使用所有库,并不喜欢它们)

class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='profile')
...
pic = models.ImageField(upload_to="photos", default='pic')

在setting.py

MEDIA_ROOT = '/media/'

另外我甚至没有使用表单,而是直接从管理员上传,问题是图片没有保存到文件夹模板/媒体/照片中。

此外,我没有关联任何视图,只是尝试将图像保存到文件夹中,这样我就能更好地理解文件系统的工作原理。

编辑:拼写错误

2 个答案:

答案 0 :(得分:1)

我不知道你的MEDIA_URL是怎样的,但媒体设置应该是这样的:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

并且不,您不在templates文件夹下保存媒体文件。这没有任何意义。 templates应该有html文件,static应该有静态文件(css,js,静态图片)和media用户上传的文件。

这样,如果有人加入你的项目或你的项目变得更大,你就不会陷入混乱/误导性的文件夹名称,否则它真的很痛,相信我

对于404问题

您需要在root中更改主urls.py以包含此内容:

if settings.DEBUG:
    urlpatterns += patterns('',
       url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
       {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    url(r'', include('django.contrib.staticfiles.urls')),
)

答案 1 :(得分:1)

使用本地环境时,您需要配置设置以正确提供静态媒体。

将此添加到您的settings.py

DEBUG = True

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles/')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'

将此添加到您的ROOT urls.py

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings
from django.conf.urls.static import static


if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)