1

所以我写了一个返回查询结果的应用程序。假设查询 URL 是/query/?A=a&B=b

现在我想在我的结果页面中添加一个“排序依据”按钮,以允许用户按时间或类型对结果进行排序。本质上只允许用户访问/query/?A=a&B=b&sorted=time/query/?A=a&B=b&sorted=type

sorted=最简单的方法是在当前 URL 之后追加。例如<a href = "{{ request.get_full_path }}&sorted=time">但问题是,如果用户首先按时间排序,然后按类型排序,您将拥有/query/?A=a&B=b&sorted=type&sorted=time

我想我可以做一些花哨的字符串操作,但我不知道我是否可以用 django 模板语言来做,我想有更好的方法来做。应该有一个地方我可以修改 GET 请求并让页面刷新。

非常感谢!

4

2 回答 2

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}}">
于 2013-01-23T02:16:57.167 回答
0

您可能想查看django-tables2 的解决方案(如果您在表格中显示此数据,您可能只想查看一般的 django-tables2)。

于 2013-01-23T03:07:49.617 回答