一、图片显示
1、在models.py中,需建立模型,这里使用了ImageField字段,用来存储图片路径,这个字段继承了FileField字段,本质上是一样的。这里Image.Field的默认max_length=100,我们可以根据需求自己指定。upload_to用于指定上传到哪个路径下。
PS: 使用ImageField首先需要装Pillow。
1 pip install Pillow
2、建立好模型,需要进行迁移操作,python manage.py makemigrations ,python manage.py migrate
3、在settings.py中,设置MEDIA_URL和MEDIA_ROOT
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
告诉Django,媒体文件的位置在哪里。这样就和数据库存储的路径相对应了,具体就是MEDIA_ROOT指定目录,upload_to就是在这个目录下进行操作
4、显示图片(图片调用):
为了能够方便录入数据,使用django后台管理,创建管理页面,python manage.py createsuperuser 根据提示进行创建,在app下admin.py中将需要上面创建的模型进行添加 admin.site.register(Test),开启runserver,打开admin页面,就可以创建具体的数据了。
需要调用的话,在view.py中将数据进行传递
curr_article = Test.objects.all()
return render(request, 'detail.html', {'curr_article':curr_article})
在模板中将图片展现出来:
为了html模板能正确找到MEDIA_URL,TEMPLATES中导入相关的包: 'django.template.context_processors.media'
参考官方文档即可,这样图片的url才是完整的,页面就可以正常显示图片了
二、上传图片
首先需要一个form,enctype="multipart/form-data" method="post" 是必须要填写的,表示数据不经过编码,直接上传。{%csrf_token%}也是post时,django强制要求的。
<form enctype="multipart/form-data" action="#" method="post">
{% csrf_token %}
<input type="text" name="name">
<input type="file" name="img">
<input type="submit" value="upload">
</form>
然后去views.py对视图函数进行操作
if request.method == 'POST':
file = request.FILES['img']
if file:
new_img = Test(
name=request.POST.get('name'),
image=file )
new_img.save()
与普通的数据不同,这里用了request.FILES字典的方式去获取文件,然后创建新的数据,并保存到数据库中