所以我编写了一个返回查询结果的应用程序。我们假设查询网址为/query/?A=a&B=b
现在我想在结果页面添加一个“排序依据”按钮,以允许用户按时间或类型对结果进行排序。基本上只允许用户访问/query/?A=a&B=b&sorted=time
或/query/?A=a&B=b&sorted=type
最简单的方法是在当前网址后附加sorted=
。例如<a href = "{{ request.get_full_path }}&sorted=time">
但问题是如果用户首先按时间排序,然后按类型排序,您将拥有/query/?A=a&B=b&sorted=type&sorted=time
我想我可以做一些奇特的字符串操作,但我不知道我是否可以用django模板语言来做,我想有更好的方法。应该有一个地方我可以修改GET请求并让页面刷新。
非常感谢!
答案 0 :(得分:0)
具有相同名称的两个GET
变量具有不确定性。您可以为不同类型的排序定义不同的变量。排序有两个选项,根据上下文升序或降序,您还需要这些值,以便用户可以返回默认排序。
/query/?A=a&B=b&sort_type=asc&sort_time=desc
然后在视图中:
sort_type = request.GET.get('sort_type', '')
sort_time = request.GET.get('sort_time', '')
qs = MyModel.objects.all()
if sort_type:
if sort_type == 'asc':
qs = qs.order_by('type')
elif sort_type == 'desc':
qs = qs.order_by('-type')
# same goes with sort_time
# ...
# pass sort_type and sort_type or all get variables in the context to generate url in template
现在在模板中:
<a href = "{{ request.get_full_path }}?&sort_time={{sort_time}}&sort_type={{sort_type}}">
答案 1 :(得分:0)
您可能希望查看django-tables2's solution(如果您在表格中显示此数据,您可能只想查看django-tables2)。