django资源文件 上传路径以及html页面读取image的地址

1、在model中定了ImageField的数据类型:

image = models.ImageField(upload_to='teacher/%Y/%m', verbose_name=u'头像',default='')
其中upload_to='teacher/%Y/%m'定义的是相对路径,但是后台程序怎么知道这个是相对路径呢?
这就需要在setting.py文件中定义存放上传资源的根目录,假设media是存放资源的文件夹,那么就需要定义MEDIA_ROOT和项目根目录做映射关系
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
2、html读取image地址:
在django中定义的image的类型是ImageField类型,通过进入数据库查看发现其实这个地址是一个相对路径的字符串值,在html直接取这个image的值,其实是会做转换成相对路径的地址,
那么这个取出来的其实是相对路径的地址,但是不能鞥我们的图片存取,所以我们需要在这个地址的前面加上setting.py文件中设置的存储上传数据的MEDIA_URL:
{{ MEDIA_URL }}{{ org.image }}
在使用MEDIA_URL的时候,需要在setting.py的TEMPLATES中加上'django.core.context_processors.media'(上下文处理器),
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.media',
],
},
},
]
加上这个之后,django就会自动给MEDIA_URL 注册到thml当中去,如果不这么配置,实际上是取不到MEDIA_URL 这个值的
完成上面的配置之后,发现还是没显示出我们的图片,是因为我们没有指定访问这个URL {{ MEDIA_URL }}{{ org.image }}时应该去哪去这个文件,在urls.py文件中进行以下设置:
from django.views.static import serve
#配置上传按访问处理函数
url(r'^media/(?P<path>.*)$', serve, {'document_root':MEDIA_ROOT}),






posted @ 2017-12-25 20:06  onlyhold  阅读(4804)  评论(0)    收藏  举报