首先在settings.py中配置
MEDIA_URL='/media/'
MEDIA_ROOT=os.path.join(BASE_DIR,'media')
创建存储图片的模型以及表单
#models.py
class Upload(models.Model):
username=models.CharField(max_length=100)
icon=models.FileField(upload_to='img/')
def __str__(self):
return self.name
#forms.py
class UploadForm(forms.Form):
username=forms.CharField()
icon=forms.FileField()
然后在视图函数views.py中添加
def User(request):
if request.method=='GET':
form=UploadForm()
return render(request,'upload.html',context={'form':form})
else:
form=UploadForm(request.POST,request.FILES)#如果有文件上传的时候记得添加request.FILES
if form.is_valid():
#获取表单中的数据
username=form.cleaned_data.get('username')
icon=form.cleaned_data.get('icon')
#将获取的数据存储到数据库中
up=Upload()
up.username=username
up.icon=icon
up.save()
return render(request,'show.html',context={'up':up})
return HttpResponse('fail')
#upload.html
<form action='{% url "blog:User" %}' method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="提交">
</form>
{% load staticfiles %}
<p>{{up.username}}</p>
#两种方式显示图片
<p><img src='/media/{{up.icon}}'></p>
#在模板settings.py-templates中添加:
'django.template.context_processors.media', # 在模板中可以使用{{ MEDIA_URL }}
<p><img src='{{MEDIA_URL}}{{up.icon}}'></p>
注意:还得在主路由中添加static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 才能正常显示图片:
from django.contrib import admin
from django.urls import path,include
from .settings import MEDIA_URL,MEDIA_ROOT
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('App.urls',namespace='App')),
path('blog/',include('blog.urls',namespace='blog'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
测试


参考链接
本文介绍了在Django中进行图片上传的步骤,包括在settings.py配置,创建存储图片的模型和表单,以及在视图函数views.py中的实现。同时强调了在主路由中添加静态文件路径的必要性,以确保图片能够正常显示。
425

被折叠的 条评论
为什么被折叠?



