django修改模板中的请求参数

时间:2013-01-23 00:41:00

标签: javascript ajax django django-templates django-views

所以我编写了一个返回查询结果的应用程序。我们假设查询网址为/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请求并让页面刷新。

非常感谢!

2 个答案:

答案 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)。