Django &引用;键';项目移动';在<;查询信息:{}>&引用;
Temlate:Django &引用;键';项目移动';在<;查询信息:{}>&引用;,django,Django,Temlate: <form action="/remove_from_cart/" method="post">{% csrf_token %} {% for item in request.session.cart %} <div><input type="checkbox" name="itemsForRemove" value="{{ item.position }}"/>{{ item.product.name }}</div>
<form action="/remove_from_cart/" method="post">{% csrf_token %}
{% for item in request.session.cart %}
<div><input type="checkbox" name="itemsForRemove" value="{{ item.position }}"/>{{ item.product.name }}</div>
{% endfor %}
<p><input type="submit" value="Delete item"></p>
</form>
浏览器中的HTML
<form action="/remove_from_cart/" method="post">
<div style="display:none">
<input type="hidden" name="csrfmiddlewaretoken" value="c49716c88a56e8e9884b31a233076b48"/>
</div>
<div>
<input type="checkbox" name="itemsForRemove" value="1"/>
Some text
</div>
<div>
<input type="checkbox" name="itemsForRemove" value="2"/>
Some text
</div>
<div>
<input type="checkbox" name="itemsForRemove" value="3"/>
Some text
</div>
<div>
<input type="checkbox" name="itemsForRemove" value="4"/>
Some text
</div>
<div>
<input type="checkbox" name="itemsForRemove" value="5"/>
Some text
</div>
<p>
<input type="submit" value="Delete item"/>
</p>
</form>
一些文本
一些文本
一些文本
一些文本
一些文本
引发异常:“在中找不到键“itemsForRemove”
如果我将“removeThis=request.POST['itemsForRemove']”更改为类似于:removeThis=request.POST['foo'],则引发异常:“在中找不到键'foo'。u'itemsForRemove':[u'6',u'7']}为什么?!我怎样才能解决这个问题 如果请求不包括
itemsForRemove
的值,它将引发异常。更好的方法是使用removeThis=request.POST.get('itemsForRemove','')
,它将提供默认值'
,即使值不存在,也不会引发异常。您的问题是您正在通过请求.path\u info
重定向,这只是将您重定向回您的remove\u cart
视图
第一个错误是在“中找不到“Key”itemsForRemove“的原因是第一次尝试成功,并且您的视图重定向到自身作为GET,而GET显然没有itemsForRemove POST数据
当您将代码更改为“foo”时,它在您的第一个后期阶段失败(这就是为什么您正确地看到“itemsForRemove”
)
无论如何,修复重定向问题,然后添加一个检查以确保通过POST调用您的视图
def RemoveProductFromCart(request):
if not request.method == 'POST':
return http.HttpResponseForbidden()
removeThis = request.POST['itemsForRemove']
listOfItems = request.session['cart']
for i in removeThis:
del listOfItems[int(removeThis) - 1]
return redirect('somewhere_else')
def RemoveProductFromCart(request):
if not request.method == 'POST':
return http.HttpResponseForbidden()
removeThis = request.POST['itemsForRemove']
listOfItems = request.session['cart']
for i in removeThis:
del listOfItems[int(removeThis) - 1]
return redirect('somewhere_else')