django上传和展示图片 re_path

{%load static%}

<body>
    <form method="post" action="/a1/{{obj.id}}/addORupdate" enctype="multipart/form-data">
        {% csrf_token %}
        商品图片<input name="pic" type='file' value="{{obj.pic}}"/><br>
        <img src="{{obj.pic}}" alt="" style="height: 100px">
    </form>
</body>
</html>

配置上传图片的保存路径MEDIA_URL

//djdemo1\settings.py
# 配置文件上传路径
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

设置保存路径MEDIA_URL可访问

//djdemo1\urls.py

from django.contrib import admin

from django.conf import settings
from django.conf.urls.static import static,serve
from django.views.generic.base import RedirectView
from django.urls import path,re_path

urlpatterns = [
	***
	#写法1,推荐。貌似生产环境settings.DEBUG+false时方法2失效
	re_path(r'^media/(?P<path>.*)$', serve,{'document_root':settings.MEDIA_ROOT},name='media'),
]
#写法2
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)
//app1\views.py
def addORupdate(request, id):
    if request.method == "GET":
        if (id == 0):
            return render(request, "update.html", {'obj': {'id': id}})
         # 获取单个对象
        # obj = models.Product.objects.get(id=id)
        obj = models.Product.objects.filter(id=id).first()
        return render(request, "update.html", {'obj': obj})
    # print(request.GET)
    # print(id)

    myfile = request.FILES.get('pic',None)
    try:
        filename=utils.upload_file(myfile, settings.MEDIA_ROOT)
    except Exception as e:
        return HttpResponse(e)

    objmap={
        'name': request.POST.get('name', 'No Name'),
        'price': request.POST.get('price', 250),
        'count': request.POST.get('count', 7),
        'category_id': request.POST.get('category', 'No category'),
        'pic': settings.MEDIA_URL+filename,
        'description': request.POST.get('description', 'No Description'),
        'time':datetime.now()
    }
    # print(request.FILES)
    print('>>',objmap)
    if  id==0:
        models.Product(**objmap).save()
    else:
        models.Product.objects.filter(id=id).update(**objmap)
    return redirect("/a1/list")

上传代码

//baseApp\utils.py
import time,os

def upload_file(myfile, filename_dir):
    suffix = str(myfile.name.split('.')[-1])
    times = str(time.time()).split('.').pop()   # 生成时间戳,取小数点后的值
    fil = str(myfile.name.split('.')[0])
    filename = times + '_' + fil + '.' + suffix
    print(filename, filename_dir)
    with open(os.path.join(filename_dir,filename), 'wb+') as destination:
        for chunk in myfile.chunks():
            destination.write(chunk)
        destination.close()
    return filename
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值