我一直在尝试创建重新加载按钮,一旦点击,就会提交javascript表单的支持:
<div style="float: left;width:100%;height: 8%;background-color: #333333;min-height: 60px;">
<form id="rel_inv" name="reload_inventory" action="/account/" method="post">
{% csrf_token %}
<input type="submit" name="reloadinv" value="inventory_reload" style="display: none;"></input>
<div onclick="javascript:document.getElementById('rel_inv').submit();" name="reload_inv" style="width: 60px;height: 60px;cursor: pointer;text-decoration:none;display: block;"><img src="/static/Home/images/reload_i.png" style="width: 30px;height: 30px;margin-top: 25%;margin-left: 25%;"></div>
</div>
单击div时,页面会重新加载,但是我仍然没有在views.py中收到任何POST请求 -
reload_inventory = "false"
if request.method == 'POST':
print("request has been received")
if request.POST.get("reloadinv"):
reload_inventory = "true"
reload_inventory变量通过上下文发送到模板。为了在发送POST请求后检查变量是否被更改,我向<script>
-
alert("{{ reload_inventory }}")
脚本始终警告“false”,并且在提交表单时request.method从未POST过...
最终目标是使用{{ reload_inventory }}
变量来获取用户是否请求重新加载库存。如果{{ reload_inventory }}
为"true"
,则会调用广告资源功能,并自动打开用户的广告资源。
更简单地说,一旦用户点击重新加载按钮,页面就会重新加载新变量reload_inventory
。如果reload_inventory
为“true”,则会通过javascript打开“库存”菜单,如果不是,则反之亦然。
那么问题是什么呢?是否有理由为什么即使提交表单,request.method也不等于POST?有没有更好的方法呢?我的代码有问题吗?提前谢谢。
答案 0 :(得分:2)
问题出在这一行:
if request.POST.get("reload_inv"):
POST
字典不包含此类值。您可以在print(request.POST)
之后加print("request has been received")
并查看。
相反,所有POST
键值对都填充了表单数据(而不是javasciript)。 reload_inv
变量是div
(<div onclick="javascript:document.getElementById('rel_inv').submit();" name="reload_inv">...</div>
)的名称,实际上它不是有效的HTML。
要开始工作,请将if request.POST.get("reload_inv"):
更改为:
if request.POST.get("reloadinv"):
这是input
(<input type="submit" name="reloadinv" value="inventory_reload" ...>
)
[编辑]:此外,当您使用其他元素(<input type="submit">
)提交表单时,没有必要使用div
。而是从以下位置更改此输入:
<input type="submit" name="reloadinv" value="inventory_reload" style="display: none;"></input>
为:
<input type="hidden" name="reloadinv" value="inventory_reload">
我在本地进行了测试,效果很好。