我正在使用django,并且有一个带有GET表单的静态网页,以及大约30个复选框。用户选择各种框,并单击搜索,并将数据库的结果返回到表中的同一页面。但是,所有复选框都已清除,因为HTML是无状态的。
“记住”复选框状态的最简单的解决方案是什么?我查看了django文档,但这些示例只使用变量和IF作为单个文本形式。当然,我不必检查是否在querydict中设置了每个复选框?另外,我的表单是自定义创建的,而不是使用django表单。
最终,我计划在页面上使用JSON,只更新表格,这样可以解决这个问题,但我不确定是否会引入更多,例如后退按钮不能用于之前的搜索。
答案 0 :(得分:2)
“'记住'复选框的状态最简单的解决方案是什么?”
网络交易是无国籍的。
有几种常见的实现状态的方法。
会话。如果您的用户已登录,则他们会有会话。将内容存储在会话中。他们POST的表单进入会话。然后可以检索这些内容,以便将新表格发回给他们。
缓存数据。会话使用cookie。您可以手动使用cookie。你有两个选择。
将表单复选框信息放入cookie中。通过回复发送它。检查每个请求中的cookie,以便知道将表单播种的内容。
将会话密钥放入cookie中。这就是Django为您所做的。不要自己实现。
查询网址中的字符串。你有两个与cookie相同的选择。将设置设置为旧的base64字符串或传递代表会话的ID。
答案 1 :(得分:0)
有一些方法可以解决后退按钮问题(哈希标记以及附加到URL的内容)。但是,我总是通过这种方式实现这一目标。基本上,我会在POST中将复选框作为数组传递,然后,当你去制作它们时,只需创建一个循环,它将生成你需要的所有盒子,并检查POST以查看它是否已被检查。除此之外,我不知道。
答案 2 :(得分:0)
使用GET?好。以与访问文本字段数据相同的方式访问复选框。
request.GET中[ 'yourfield']
使用打印位置检查GET中可用的信息。
print request.GET ['yourfield']
答案 3 :(得分:0)
如果您使用的是Form对象,那么您只需将构造函数传递给请求即可。如果您是手动操作,则必须在会话中进行一些操作。