下面是实现Django后台上传并显示图片的完整攻略。
准备工作
- 安装Pillow:Pillow是Python Imaging Library的一个分支,用于操作图片。
pip install Pillow
- 修改settings.py文件,添加MEDIA_ROOT和MEDIA_URL:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
MEDIA_ROOT指定存储用户上传文件的根路径,MEDIA_URL指定在模板中引用这些文件的URL前缀。
实现后台上传图片功能
- 定义模型类
```
from django.db import models
class Image(models.Model):
title = models.CharField(max_length=200)
image = models.ImageField(upload_to='images/')
```
- title:图片标题,CharField类型
-
image:图片文件,ImageField类型,upload_to指定上传路径
-
定义表单类
```
from django import forms
from .models import Image
class ImageForm(forms.ModelForm):
class Meta:
model = Image
fields = ('title', 'image')
```
- 继承ModelForm类
- 指定模型为Image
-
指定包含的字段为title和image
-
编写视图函数
```
from django.shortcuts import render, redirect
from .forms import ImageForm
def upload(request):
if request.method == 'POST':
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('index')
else:
form = ImageForm()
return render(request, 'upload.html', {'form': form})
```
- 接收POST请求,实例化ImageForm并验证数据
- 如果验证通过,保存表单数据,并重定向到首页
-
如果是GET请求,实例化一个空的ImageForm对象,渲染upload.html模板并传入form参数
-
创建模板upload.html
```
```
- 使用{% csrf_token %}标签防止跨站伪造请求攻击
- 使用{{ form.as_p }}渲染表单,as_p参数表示按照p标签的方式渲染表单元素
- 添加上传按钮
实现后台显示图片功能
- 在urls.py文件中添加一个urlpattern
```
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ...
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
```
- 在模板文件中引用上传的图片
```
{% for image in images %}
{{ image.title }}
{% endfor %}
```
- 遍历images列表
- 显示图片标题和图片地址,图片地址使用image.image.url获取
示例说明
-
示例一:上传并显示一张图片
-
在浏览器中访问上传页面
- 选择一张图片文件并输入一个标题
- 点击上传按钮
-
在首页可以看到上传的图片
-
示例二:上传并显示多张图片
-
在浏览器中访问上传页面
- 选择多张图片文件并为每一张图片输入一个标题
- 点击上传按钮
- 在首页可以看到上传的多张图片
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django实现后台上传并显示图片功能 - Python技术站