我有一个Django网站,基本上只显示一堆项目 来自具有搜索,过滤等的数据库。该网站是公开的 访问,没有登录或任何东西。我想做的是第一个 用户访问网站的时间,提示他们选择过滤器,然后 保存那个过滤器选择(在他们的机器上将是更好的,将是一个 浏览器cookie在这里工作?)以便将来每次访问它们 网站,它与过滤器一起显示。
所以我在这里有两个具体问题:
1)存储他们选择的最佳方式是什么?
2)收集他们选择的最佳方式是什么?我的方式 设想这种行为是他们第一次访问该网站, 它们呈现出各种各样的“弹出式”,基本上是要求的 他们的过滤器选择,继续到他们的主站点页面 过滤器选择已启用我遇到的问题是过滤器 他们选择的选项会更改将显示的内容 网站。我有没有办法避免重新加载整个页面 有他们的过滤器选择吗?
这是一个像我正在尝试的弹出窗口这样的例子 创建:http://www.wizards.com/wpn/events/rules.aspx
谢谢, -Alexei
答案 0 :(得分:1)
给用户一个cookie肯定会有用。在Web开发中,该技术被称为为用户创建“会话”,以便每次他们从您的站点请求页面时,该请求都可以被识别为该特定会话的一部分并相应地进行服务。
Django提供了一个优秀且易于使用的会话框架。您应该阅读文档here,但我将总结您需要采取的步骤。
django.contrib.sessions.middleware.SessionMiddleware
位于设置文件中的MIDDLEWARE_CLASSES
变量中。SESSION_COOKIE_AGE
。如果您希望用户的选择持续很长时间,您可以将此数字设置得非常高。完成此操作后,传递到视图中的request
变量将具有session
属性。 session
是一个对象,您可以像字典一样使用它来存储信息。神奇的一点是,对于向您的网站发出请求的每个用户,该信息都是唯一的。
此部分代码演示了如何根据存储在其会话中的先前选择的用户选择返回内容:
def get_front_page_contents(request):
filter = request.session.get('filter_choice', False)
if filter:
# do the filtering
render_to_response(template_name,
{'filtered_content': content},
RequestContext(request))
else:
# the user has not made a choice so
# return a default result set or redirect
# to form that allows them to make a choice
你的第二个问题是如何首先收集这个选择。这是一个使用多页加载的简单解决方案。
request.session
是否为该用户保存了选项。
request.session
中以供此用户使用。返回他们想要的内容。 在此过程之后,当同一用户稍后返回第一步时,将显示他们想要的内容。
避免页面重新加载是一个单独的问题,但可以使用javascript和AJAX技术轻松完成。你可能想要提供一个包含javascript的最小页面来提出内容请求。可以用完全相同的方式检查这些AJAX请求,以检查是否存在会话数据。