所以,基本上我正在尝试做的是曲棍球池应用程序,我应该能够过滤以查看数据。例如,按自由球员,进球,助攻,位置等进行过滤。
我打算用一堆查询字符串来做这件事,但我不确定传递这些查询字符串的最佳方法是什么。让我们说我想要在第2页(因为我使用分页来分割页面),按目标排序,只显示向前,我会有以下查询集:
?page=2&sort=g&position=f
但如果我在那个页面上,并且它向我展示了所有这些相应的信息,如果我点击说,分数而不是目标,我仍然希望我的所有其他过滤器,所以像这样:
?page=2&sort=p&position=f
由于HTTP是无状态的,我在遇到最好的方法时会遇到麻烦。如果有人有一些好主意,他们会非常感激,谢谢;)
Shawn J
答案 0 :(得分:2)
首先,考虑一下你是否真的想要每次都保存所有参数。在您给出的示例中,您更改排序顺序但保留页码。考虑到您现在在该页面上有不同的元素,这是否真的有意义。更重要的是,如果更改过滤器,则当前选择的页码可能甚至不存在。
无论如何,假设这是你想要的,你不需要担心状态或cookie或其中任何一个,因为你需要的所有信息都已经在GET参数中。您需要做的就是根据需要替换其中一个参数,然后重新编码字符串。在模板标签中很容易,因为GET参数存储为QueryDict,它基本上只是一个字典。
像(未经测试)的东西:
@register.simple_tag
def url_with_changed_parameter(request, param, value):
params = request.GET
request[param] = value
return "%s?%s" % (request.path, params.urlencode())
您可以在模板中使用它:
{% url_with_changed_parameter request "page" 2 %}
答案 1 :(得分:1)
你看过django-filter了吗?真的太棒了。
答案 2 :(得分:0)
检查管理应用程序中的过滤机制,它包括处理动态构造的URL以及查询字符串中提供的过滤器信息。
此外 - 考虑在cookie /会话中保存实际状态信息。
答案 3 :(得分:0)
如果你想保存所有“参数”,我会说它们是资源标识符,通常应该是URI的一部分。