【问题标题】:Preserving checkbox states on same page with query results与查询结果在同一页面上保留复选框状态
【发布时间】:2010-11-08 18:37:37
【问题描述】:

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

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

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

【问题讨论】:

  • 谢谢大家。你帮我澄清了我没有错过任何 Django 快捷方式(使用自定义表单),我最终切换到使用 JSON,所以现在我只需要弄清楚后退按钮的事情。周末愉快。

标签: django checkbox stateless


【解决方案1】:

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

Web 事务是无状态的。

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

  1. 会话。如果您的用户已登录,则他们有一个会话。在他们的会话中存储东西。他们发布的表单进入会话。然后可以检索它,以便将新表单发回给他们。

  2. 饼干。会话使用 cookie。您可以手动使用 cookie。你有两个选择。

    • 将表单复选框信息放入 cookie。将其与响应一起发送。检查每个请求中的 cookie,以便您知道使用什么播种表单。

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

  3. URL 中的查询字符串。您有与 cookie 相同的两种选择。要么将设置设为旧的 base64 字符串,要么传递一个代表会话的 ID。

【讨论】:

    【解决方案2】:

    有一些方法可以解决后退按钮问题(哈希标签和附加到 URL 的内容)。然而,我一直做到这一点的方式就是这样。本质上,我会在 POST 中将复选框作为数组传递,然后,当您制作它们时,只需创建一个循环来制作您需要的所有框,然后检查 POST 以查看它是否已被选中。除此之外,我不知道。

    【讨论】:

      【解决方案3】:

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

      request.GET['yourfield']

      使用打印语句检查 GET 中可用的信息。

      打印请求.GET['yourfield']

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-06-11
          • 2022-01-25
          • 2016-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多