{%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