在单击多个按钮时向Django视图传递Ajax请求



我试图用Ajax Post通过两个Click事件将数据传递到View,当我只有一个Button事件(点击事件(时,一切都很顺利,但当我添加第二个点击事件时,我得到了错误

如果需要更多的参考资料,请告诉我。

模板(有两个按钮和两个下拉菜单(

<select class="selectpicker form-control Plottype">
<option value="1">Line</option>
<option value="2">Scatter</option>
<option value="3">Bar</option>
<option value="3">Barh</option>
</select>
<div class="btn btn-primary getplot1">Plot1</div>
<select class="valueCountCol selectpicker form-control" name="valueCountCol">
<option>Col1</option>
<option>Col2</option>
</select>
<div class="btn btn-primary getplot2">Plot2</div>

Ajax POST(脚本中(

$(document).ready(function () {
$(".getplot1").on('click',function () {
var plottypevalue = $(".Plottype option:selected").text();
$.ajax({
url: "/",
type: "post", // or "get"
data: {'plot1':plottypevalue},
headers: { "X-CSRFToken": "{{ csrf_token }}" }, // for csrf token
success: function (data1) {        
console.log(data1);
},
});
});
$(".getplot2").on('click',function () {
var valueCountCol = $(".valueCountCol option:selected").text();
$.ajax({
url: "/",
type: "post", // or "get"
data: {'plot2':valueCountCol},
headers: { "X-CSRFToken": "{{ csrf_token }}" }, // for csrf token
success: function (data1) {
console.log(data1);
},
});
});
});

视图.py

if request.POST['plot1']:
plottypevalue = request.body.unicode('utf-8')
data1 = plottypevalue
return HttpResponse(json.dumps(data1), content_type="application/json")
if request.POST['plot2']:
valcountcol = request.body.unicode('utf-8')
data1 = valcountcol
return HttpResponse(json.dumps(data1), content_type="application/json")

错误

Internal Server Error: /
Traceback (most recent call last):
File "C:UsersyigadiPycharmProjectsMLAutoProjectvenvlibsite-packagesdjangoutilsdatastructures.py", line 76, in __getitem__
list_ = super().__getitem__(key)
KeyError: 'plot1'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:UsersyigadiPycharmProjectsMLAutoProjectvenvlibsite-packagesdjangocorehandlersexception.py", line 34, in inner
response = get_response(request)
File "C:UsersyigadiPycharmProjectsMLAutoProjectvenvlibsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:UsersyigadiPycharmProjectsMLAutoProjectvenvlibsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:UsersyigadiPycharmProjectsMLAutoProjectMLAPMLAppviews.py", line 53, in homepage
if request.POST['plot1']:
File "C:UsersyigadiPycharmProjectsMLAutoProjectvenvlibsite-packagesdjangoutilsdatastructures.py", line 78, in __getitem__
raise MultiValueDictKeyError(key)
django.utils.datastructures.MultiValueDictKeyError: 'plot1'

以下是request.POST.get()工作的原因:

一开始只使用request.POST['plot1']是很自然的。然而,在这种情况下发生的情况是,如果plot1不存在,它将引发一个KeyError,这就是您的情况。

解决方案是使用request.POST.get('plot1', False)。如果'plot1不存在,此方法允许您指定要使用的默认参数。在这种情况下,False是默认参数。