在Django中通过request.GET排序

时间:2011-06-07 08:37:05

标签: django django-views

我希望人们能够对事物进行排序,而不仅仅是我手动排序。因此,例如,我将有一个排序链接,链接将类似于/?sort=issues,这将按字母顺序显示问题列表等。或/?sort=cover它将显示仅包含封面的问题列表。

Views.py

def issues(request):
    issues_list = Issue.objects.order_by('-date_added')
    paginator = Paginator(issues_list, 24)
    try:
        page = int(request.GET.get('page', '1'))
    except ValueError:
        page = 1
    try:
        issues = paginator.page(page)
    except (EmptyPage, InvalidPage):
        issues = paginator.page(paginator.num_pages)
    return render_to_response('comics/issues.html', {'issues': issues}, context_instance=RequestContext(request))

所以,我希望任何人都可以通过-date_addeddate_adddedpub_dateimportance等方式进行排序。

我想我必须修改我的观点并做一些请求。获得魔法,但我对Django很新,并且真的不知道如何去做。我也检查了Django文档。

2 个答案:

答案 0 :(得分:5)

sort_by = request.GET.get('sort', '-date_added')
if sort_by not in ['-date_added', 'date_addded', 'pub_date', 'importance']:
     sort_by = '-date_added'
issues_list = Issue.objects.order_by(sort_by)

答案 1 :(得分:0)

将它放在视图的顶部:

user_specified = request.GET.get('sort', **''**)

if user_specified:
  issues_list = Issue.objects.order_by(user_specified)
else: # default ordering
  issues_list = Issue.objects.order_by('-date_added')

NB:Haven没有测试过这个!