将图像保存到用户模型中

Saving an image into user model

我正在尝试在我的用户模型中创建一个 "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/'

另外我什至没有使用表格而是直接从管理员上传,问题是图像没有保存到文件夹templates/media/photos。

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

编辑:拼写错误

我不知道你的 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 用户上传的文件。

这样,如果有人加入你的项目或者你的项目变大了,你就不会在 chaos/misleading 文件夹名称中结束,否则真的很痛苦,相信我

对于 404 问题:

您需要更改根目录中的主要 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')),
)

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

将此添加到您的 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)