将图像保存到用户模型中
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)
我正在尝试在我的用户模型中创建一个 "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)