Django中model里的ImageField在mysql数据库中的相应字段是一个
varchar(100)(ImageField是没有参数情况下的),它存放的是图片的相对路径(upload_to的值加上图片名)。
ImageFileld字段在前台的表现为一个上传文件的域,只不过在这里只能上传图片而已,这个和FileField非常相似。要使用
ImageField需要Python Imaging Library(PIL库)。
直接调用ImageField字段得到的一个ImageField类的值,只要str()转换它既可以得到数据库中存放的图片相对路径。
在定义ImageField字段是必须制定参数upload_to。这个参数会加在settings.py中的MEDIA_ROOT后面,形成一个路径,
这个路径就是上传图片的存放位置。所以要用ImageField最好要设置settings.py中的MEDIA_ROOT。
在后台的管理页面中,默认情况下ImageField也是表现为一个上传图片的域,并且还有一个指向图片的链接(图片的url路径)。这个链接我要特别的
说明一下,因为在这里我浪费了好多的时间。settings.py中有MEDIA_URL这个字段,如果不设置它的话,点击这个链接,url会变成上个页
面的url加上图片的路径,会报错把图片url的字符串int()时出错。设置这个字段之后,url会变得很不一样,这时url是
ADMIN_MEDIA_PREFIX的值加上图片的url路径。图片的url路径就是upload_to这个属性的值。要注意的是MEDIA_URL要在前后都加上"/",表示从根目录开始,如:MEDIA_URL = '/site_media/'。
在这里说一下settings.py中几个相关的属性的意义。
MEDIA_URL:给这个属性设值之后,静态文件的链接前面会加上这个值。
MEDIA_ROOT:存放media的路径,这个值加上upload_to的值就是真实存放上传图片文件位置
ImageField属性upload_to:这个属性是必填的,这个值是显示在admin后台的图片的链接。还有就是这个值前面加上MEDIA_ROOT就是真实存放上传图片的位置。
ADMIN_MEDIA_PREFIX:这个值是admin的静态文件链接的前缀。如果这个值和MEDIA_URL的值设重了(我已开始就是这么设置
的),那么非admin的静态文件时不能显示的,会报错xxxxx不存在。这是因为MEDIA_URL和ADMIN_MEDIA_PREFIX是重的,查
找静态文件的时候把所有的静态文件都当做是admin的静态文件了,都在admin的静态文件目录下查找了,所以查找不到。将这两个值设置成不一样就解决
这个问题了。
阅读(8295) | 评论(0) | 转发(0) |