如果我正确理解这个问题,我认为您完全使用 JQuery 添加了额外的步骤。
解决方案#1- 在 jQuery 中动态创建一个表单元素并将该表单提交到您的 Django 端点。在 Django 中正常渲染模板。
JavaScript
$("#getArr").submit(function(){
var url = 'cart/';
var form = '<form action="' + url + '" method="post">';
for (var i = 0; i < chosen.length; i++) {
form += '<input type="hidden" name="ab[]" value="' + chosen[i] + '" />'
};
form += '</form>'
var form_element = $(form);
$('body').append(form_element);
form_element.submit();
});
然后在你看来,只需照常返回模板即可:
views.py
def cart(request):
if request.method == 'POST':
chosen = request.POST.getlist('ab[]')
print(chosen, file=sys.stderr)
template = loader.get_template('o/cart.html')
context = {'prodChosen': chosen,
'e': "hy"}
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('o/cart.html')
context = {}
return HttpRepsonse('fail')
# return HttpResponse(template.render(context, request))
解决方案#2- 使用 jQuery.load() 函数函数并将该表单提交到您的 Django 元素。在 Django 中通常渲染模板(或作为片段以避免重复其他页面元素)。
JavaScript
$("#getArr").submit(function(){
$('#main-content-div').load('cart/', $("#getArr").serialize());
});
views.py
def cart(request):
if request.method == 'POST':
chosen = request.POST.getlist('ab[]')
print(chosen, file=sys.stderr)
template = loader.get_template('o/cart.html')
context = {'prodChosen': chosen,
'e': "hy"}
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('o/cart.html')
context = {}
return HttpRepsonse('fail')
# return HttpResponse(template.render(context, request))
解决方案#3- 创建一个带有元素名称的典型 HTML 表单ab[]
并将该表单提交到您的 Django 端点。在 Django 中正常渲染模板。
表格:
HTML
<form id="getArr" action="cart/" method="POST">
<input type="text" name="ab[]" value="product_id_1"/>
<input type="text" name="ab[]" value="product_id_2"/>
<input type="text" name="ab[]" value="product_id_3"/>
<input type="submit" value="Submit" />
</form>
一些用于向表单添加元素的 Javascript:
JavaScript
$('.add_product').click(function(){
$('#getArr').append('<input type="hidden" name="ab[]" value="' + $(this).attr('product_id') + '"/>')
})
姜戈视图:
views.py
def cart(request):
if request.method == 'POST':
chosen = request.POST.getlist('ab[]')
print(chosen, file=sys.stderr)
template = loader.get_template('o/cart.html')
context = {'prodChosen': chosen,
'e': "hy"}
return HttpResponse(template.render(context, request))
else:
template = loader.get_template('o/cart.html')
context = {}
return HttpRepsonse('fail')
# return HttpResponse(template.render(context, request))