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