Python Django request.GET.GET()每两次返回一次None
我试图使用一些ajax请求在django视图和模板之间进行更改,但我在请求中遇到了一个奇怪的行为。GET。Python Django request.GET.GET()每两次返回一次None,python,django,ajax,request,Python,Django,Ajax,Request,我试图使用一些ajax请求在django视图和模板之间进行更改,但我在请求中遇到了一个奇怪的行为。GET。 Django发送一个错误,指出json.loads(data)的参数中的数据不应该是非类型的,因为request.GET.GET('selects')的结果似乎是无;但如果我尝试调试这段代码,似乎request.GET.GET('selects')每两次都返回一次None。 在控制台中请求request.GET.GET('selects')时,我得到: 第一次没有 和第二次“[{“pk”:
Django发送一个错误,指出
json.loads(data)
的参数中的数据不应该是非类型的,因为request.GET.GET('selects')
的结果似乎是无;但如果我尝试调试这段代码,似乎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"}]'
我终于找到了。
触发ajax调用的click()事件与元素的href属性相关。由于我没有停止函数的执行,链接被激活,并发送了一个对django视图的调用(不带参数)。。。
带有的ajax调用返回false代码>或e.preventDefault()代码>
我稍微修改了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");
});
}
});
}
功能ajaxActionMenu(主键列表,url){
$.ajax({
类型:'GET',
数据:{'pk_list':JSON.stringify(pk_list)},
url:url,
数据类型:'json',
成功:功能(数据){
每个(数据、函数(索引、值){
$(“#Modal.Modal body.nav”).append(“”);
});
},
完成:函数(){
$(“#Modal.Modal body.nav”)。在(“单击”,“.nav链接”,函数(e){
e、 preventDefault();//防止激活href链接
var urlink=$(this.attr(“href”);
ajaxAction(pk_列表,URL链接);
美元(“#model”)。model(“show”);
});
}
});
}
我想问题是,选择
并不是随每个AJAX请求一起发送的。您在浏览器的开发控制台中检查了吗?我在同一个ajax请求中得到了这些结果。数据通过ajax正确发送。我只是在python控制台中反复键入相同的命令,同时执行被set_trace()暂停。控制台每两次仅返回一次对象…服务器端可能有两个线程,其中一个响应正确,另一个响应不正确。这可能是由于会话、cookie或缓存错误。ajax调用由“父级”ajax调用中定义的单击触发。有人可能会说这与。。。但是怎么做呢?ajax函数没有调用相同的url。