layui+django 多組圖片上傳、預覽、刪除、打標簽


上傳多組圖片且每組每個圖片都要有個標簽,標簽是動態的

思路是標簽使用逗號分隔的

先在后台將標簽存入列表

然后前端layui回調時再將下一個標簽傳入前端

存儲時使用data將標簽作為額外參數傳入后台

前端

引入依賴包

<link rel="stylesheet" href="/static/layui/css/layui.css">
<script src="/static/layui/layui.js"></script>
<script src="/static/js/jquery-1.8.2.min.js"></script>
 
前端代碼
{% csrf_token %}
<div id="provena">{{text}}</div>
<div>
    <button type="button" class="layui-btn layui-btn-lg" id="test1">
        <i class="layui-icon">&#xe67c;</i>選擇圖片
      </button>
      <div class="layui-row" style="width:1500px;">
        <div class="layui-upload-list"></div>
    </div>
        <input type="text" name="provename" id="provename" value={{text}} hidden=True  readonly="readonly"> 
        <input type="submit"  id ="abc" class="layui-btn layui-btn-radius layui-btn-normal" style="font-size: 25px;" value=上傳圖片>

</div>
<script>
    layui.use(['upload', 'jquery'], function(){
      var upload = layui.upload;
          var $ = layui.jquery;
          //執行實例
          var uploadInst = upload.render({
              elem: '#test1', //綁定元素
              multiple: true,  //多圖上傳
              method: 'POST',
              auto: false,  //關閉自動上傳
              data: {
                    'csrfmiddlewaretoken': function () {    //post傳輸需要csrf驗證
                        return $(':input:first').val()
                    },
                    provename: function(){
                        return $('#provename').val();  //傳入后台額為動態參數
                    }
                },
              acceptMime: 'image/*',
              bindAction: "#abc",//綁定上傳
              url: "{% url 'provee' %}", //上傳接口
              choose: function (obj) { //obj參數包含的信息,跟 choose回調完全一致
                  //將每次選擇的文件追加到文件隊列
                  files = obj.pushFile();
                  //layer.load(); //上傳loading
                  obj.preview(function (index, file, result) {
                      $(".layui-upload-list").append('<img src="' + result + '" id="remove_' + index + '" title="雙擊刪除該圖片" style="width:315px;height:435px;">') //預覽圖片大小
                      $('#remove_' + index).bind('dblclick', function () {//雙擊刪除指定預上傳圖片
                          delete files[index];//刪除指定圖片
                          $(this).remove();
                      })
                      //console.log(1, index); //得到文件索引
                      //console.log(2, file.name); //得到文件對象
                      //console.log(3, result); //得到文件base64編碼,比如圖片
                  })
              },
              done: function (res) {
                  //imgs = imgs.concat(res.Data)
                  //console.log(imgs)
                  if (res.code==0) {
                      layer.msg("圖片上傳成功!", { icon: 1, time: 1000 },
                      //清空文件列表
                      function (){
                        for (let x in files) {
                            delete files[x];
                        }
                        $(".layui-upload-list").html(""); //清空div
                    });
                    if(res.msg=="null"){   
                        window.location.href="{% url 'successful' %}"     //結束跳轉指定頁面
                    }
                    if(res.msg!="null"){
                        $("#provename").attr("value",res.msg); //賦值input value
                        $("#provena").html(res.msg);  //賦值div
                    }
                  }
                  //上傳完畢回調
              },
              error: function () {
                  //請求異常回調
              }
          });
    });
    </script>
 
后台
import jsoni
from django.http import JsonResponse
 
def provee(request):
    if request.user.is_authenticated: #是否登錄
        user = request.user.id
        if len(peoplesProfile.objects.filter(user_id=user))>0: #上一步信息是否填寫
            people = peoplesProfile.objects.get(user_id=user)
            obj = information.objects.get(id=people.intention_id)  
            str = obj.provena  #獲取標簽內容  標簽采用逗號分隔
            strlist = str.split(',')
            list = []      #新建列表用來存儲標簽
            for value in strlist:
                list.append(value)  #標簽分開存入列表
            if request.method =='GET':
                texta = list[0]
                if len(Prove.objects.filter(provePeople_id=user))>0:   #判斷是否重復提交
                    Prove.objects.filter(provePeople_id=user).delete() #重復則刪除原有的
                return render(request,'first/proved.html',{'text':texta})
            if request.method =='POST':
                com_from = request.META.get("HTTP_REFERER")
                textb = request.POST.get('provename')  #獲取額外參數
                for f in request.FILES.getlist('file'):    #循環圖片列表
                    pro = Prove()  
                    pro.provePeople = request.user
                    pro.proveName = textb         #打上標簽
                    pro.provePhoto = f        #存入圖片
                    pro.save()
                    a=0        #初始一個參數a
                for text in list:     #循環列表
                    a=a+1
                    if text==textb:     #與前端獲取標簽相同時
                        if textb==list[len(list)-1]:    #是否為最后一個標簽
                            textc = "null"
                            break
                        else:
                            textc = list[a]   #下一個標簽 
                            break
                return JsonResponse({'code': '0','msg': textc})    #json返回
        else:
            return redirect(reverse('home'))    
    else:
        return redirect(reverse('loginh'))


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM