Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中通过request.GET进行排序_Django_Django Views - Fatal编程技术网

在Django中通过request.GET进行排序

在Django中通过request.GET进行排序,django,django-views,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:

我希望人们能够排序,而不仅仅是我手动排序。例如,我将有一个指向排序的链接,该链接类似于,
/?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\u added
date\u added
发布日期
重要性
,等等


我想我必须修正我的观点,做一些请求。变魔术吧,但我对Django很陌生,真的不知道该怎么做。我也检查了Django文档。

将其放在视图的顶部:

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')

注:我还没有测试过这个

将其放在视图的顶部:

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')
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)

注:我还没有测试过这个

我不敢相信这有多简单。非常感谢。但是分页呢?如果我按发布日期排序,然后单击下一页,它将返回默认排序。@请注意,这就是为什么您应该在模板中的链接中添加
?sort=…
。或者使用一些现有的解决方案,比如。我确实将
?sort=…
作为链接添加到了我的模板中。添加
/?sort=pub\u date/?page=2
也不起作用。。。我不希望为类似的内容添加新的应用程序。@Aimee是的,您将需要手动编码url。复制
请求。获取
,根据需要修改它,然后使用其
urlencode
方法。这是一个很好的教程,但如果您想要有效的解决方案,我建议您使用一个现有的应用程序。@Aimee
/?sort=pub\u date&page=2
我不敢相信这有多简单。非常感谢。但是分页呢?如果我按发布日期排序,然后单击下一页,它将返回默认排序。@请注意,这就是为什么您应该在模板中的链接中添加
?sort=…
。或者使用一些现有的解决方案,比如。我确实将
?sort=…
作为链接添加到了我的模板中。添加
/?sort=pub\u date/?page=2
也不起作用。。。我不希望为类似的内容添加新的应用程序。@Aimee是的,您将需要手动编码url。复制
请求。获取
,根据需要修改它,然后使用其
urlencode
方法。这是一个很好的教程,但如果您想要有效的解决方案,我建议您使用一个现有的应用程序。@Aimee
/?sort=pub\u date&page=2
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)