Django request.GET.GET()每两次返回一次None

2024-10-03 15:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用一些ajax请求在django视图和模板之间进行更改,但我在请求中遇到了一个奇怪的行为。GET。
Django发送了一个错误,指出json.loads(data)的参数中的数据不应该是NoneType,因为request.GET.get('selects')的结果似乎是None;但是如果我试着调试这段代码,似乎request.GET.get('selects')每两次返回None

在控制台中请求request.GET.get('selects')时,我得到:
第一次没有
和第二次“[{“pk”:“57226796-0960-428a-88aa-ba4120ad34b4”}]”,
然后再也没有了
然后在第三次尝试时“[{“pk”:“57226796-0960-428a-88aa-ba4120ad34b4”}]” 每一次尝试都没有结果。。。。 我错了什么

视图.py

class AjaxRenameView(View):

    def get(self,request):
        #import pdb; pdb.set_trace()
        selects=request.GET.get('selects', None)
        selects=json.loads(selects)
        pks = [ pk['pk'] for pk in selects]
        if len(pks)==1:
            folder=Folder.objects.filter(pk=pks[0])
            spotler=Spotler.objects.filter(pk=pks[0])
            if folder:
                form=FolderRenameForm(instance=folder)
                title=_('rename folder')
            elif spotler :
                form=SpotlerRenameForm(instance=folder)
                title=_('rename project')

            context={'form':form,'title':title,'submit':_('rename'),'has_error':False}
            html_form = render_to_string('includes/modal_form.html',
                context,
                request=request,
            )
            return JsonResponse({'html_form': html_form})

        return JsonResponse({'has_error':True, 'message':_('an error has occured while renaming')}, safe=False)

    def post(self,request):
        pass

folder.js

  //...
  function ajaxAction(selects,url,next){
    // when clicked on item of menu (rename, share, move...)
    $.ajax({
      type:"GET",
      data:{'selects':JSON.stringify(selects),'next':next},
      url: url,
      dataType:"json",
      beforeSend: function () {
        $("#Modal .modal-content").empty();
      },
      success: function (data) {
        $("#Modal .modal-content").html(data.html_form);
      }
    });//ajax
  }//function ajaxAction
//...

控制台

(Pdb) request.GET.dict()
{'selects': '[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]', 'next': '/fr/wf/myfiles/'}
(Pdb) request.GET.get('selects')
(Pdb) request.GET.get('selects')
'[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]'
(Pdb) request.GET.get('selects')
(Pdb) request.GET.get('selects')
'[{"pk":"57226796-0960-428a-88aa-ba4120ad34b4"}]'

Tags: formdatagettitlerequesthtmlfunctionfolder
1条回答
网友
1楼 · 发布于 2024-10-03 15:30:27

我终于找到了。 触发ajax调用的click()事件与元素的href属性相关。由于我没有停止函数的执行,链接被激活,并发送了一个对django视图的调用(不带参数)。。。 使用return false;e.preventDefault();的ajax调用

我稍微修改了ajax调用:

function ajaxActionMenu(pk_list,url){
  $.ajax({
    type:'GET',
    data:{'pk_list':JSON.stringify(pk_list)},
    url: url,
    dataType:'json',
    success:function(data){
      jQuery.each(data, function(index,value){
        $("#Modal .modal-body .nav").append('<a class="nav-link" href="'+value["url"]+'">'+value["menuitem"]+'</a>');
      });
    },
    complete: function(){
      $("#Modal .modal-body .nav").on("click",".nav-link",function(e){
        e.preventDefault(); // prevent the activation of the href link
        var urlLink=$(this).attr("href");
        ajaxAction(pk_list,urlLink);
        $("#Modal").modal("show");
      });

    }
  });
}

相关问题 更多 >