Django 图片上传

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

首先在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)

测试
在这里插入图片描述
在这里插入图片描述
参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值