使用查询结果保留同一页面上的复选框状态

时间:2009-07-07 17:02:21

标签: django checkbox stateless

我正在使用django,并且有一个带有GET表单的静态网页,以及大约30个复选框。用户选择各种框,并单击搜索,并将数据库的结果返回到表中的同一页面。但是,所有复选框都已清除,因为HTML是无状态的。

“记住”复选框状态的最简单的解决方案是什么?我查看了django文档,但这些示例只使用变量和IF作为单个文本形式。当然,我不必检查是否在querydict中设置了每个复选框?另外,我的表单是自定义创建的,而不是使用django表单。

最终,我计划在页面上使用JSON,只更新表格,这样可以解决这个问题,但我不确定是否会引入更多,例如后退按钮不能用于之前的搜索。

4 个答案:

答案 0 :(得分:2)

“'记住'复选框的状态最简单的解决方案是什么?”

网络交易是无国籍的。

有几种常见的实现状态的方法。

  1. 会话。如果您的用户已登录,则他们会有会话。将内容存储在会话中。他们POST的表单进入会话。然后可以检索这些内容,以便将新表格发回给他们。

  2. 缓存数据。会话使用cookie。您可以手动使用cookie。你有两个选择。

    • 将表单复选框信息放入cookie中。通过回复发送它。检查每个请求中的cookie,以便知道将表单播种的内容。

    • 将会话密钥放入cookie中。这就是Django为您所做的。不要自己实现。

  3. 查询网址中的字符串。你有两个与cookie相同的选择。将设置设置为旧的base64字符串或传递代表会话的ID。

答案 1 :(得分:0)

有一些方法可以解决后退按钮问题(哈希标记以及附加到URL的内容)。但是,我总是通过这种方式实现这一目标。基本上,我会在POST中将复选框作为数组传递,然后,当你去制作它们时,只需创建一个循环,它将生成你需要的所有盒子,并检查POST以查看它是否已被检查。除此之外,我不知道。

答案 2 :(得分:0)

使用GET?好。以与访问文本字段数据相同的方式访问复选框。

request.GET中[ 'yourfield']

使用打印位置检查GET中可用的信息。

print request.GET ['yourfield']

答案 3 :(得分:0)

如果您使用的是Form对象,那么您只需将构造函数传递给请求即可。如果您是手动操作,则必须在会话中进行一些操作。