2010-02-16 3 views
20

내 테이블에 정렬 할 수있는 열이 있어야합니다. (마치 관리자 변경 목록에 대해 수행되는 것과 같습니다.) ... 원하는 경우 구현하고 쉽게 사용자 지정할 수있는 솔루션을 찾고 있습니다. .장고의 정렬 할 수있는 테이블 열

어떻게하면됩니까?

답변

13
+1

tablesorter는 훌륭하고 지원되는 툴킷입니다. 위의 링크는 오래된 것입니다. https://github.com/Mottie/tablesorter를 확인하십시오. – staggart

38

당신이 자바 스크립트 테이블 분류기보다 매김 사용하는 경우는 충분하지 않거나 예기치 않게 행동 할 수 있습니다.


모든 열 머리글을 링크로 만듭니다. 예 :

<th><a href="?order_by=name">Name</a></th> 

및보기에 당신이 order_by 매개 변수를 설정 여부 확인은 :

order_by = request.GET.get('order_by', 'defaultOrderField') 
Model.objects.all().order_by(order_by) 
+0

";" 'order_by' 코드 줄 끝 부분은 불필요합니다. 편집은 적어도 6 자 이상이어야하기 때문에 편집 할 수 없습니다. –

+1

@ la_f0ka : 고마워요.나는 항상 자바 스크립트와 파이썬 사이를왔다 갔다하고 있었다;) –

+0

np, 고맙다, ... 나는 이것을하는 법을 몰랐다. 그리고 나는 실제로 그것을 처리하기 위해 또 다른 앱을 설치하려고했다. –

8

난 당신이 django-tables2를 보라 좋습니다. 정확한 문제를 해결하도록 설계되었습니다. documentation에는 많은 예제가 있습니다.

+1

브래들리가 [포크] (https : // github .com/bradleyayers/django-tables2) 및 [docs] (http://django-tables2.readthedocs.org/)를 참조하십시오. – davidfischer

+0

데이비드 감사합니다. 나는 새 이름을 나타 내기 위해 찾을 수있는 대부분의 게시물을 편집했지만,이 중 하나를 놓친 것 같아요. ( –

5

위의 답 중에서 가장 많이 쓴 대답을 사용했습니다. 하지만 난 사용자 정의 태그를 사용하여 열 머리글을 여러 번 클릭하면 오름차순/내림차순 정렬을 해결합니다.

태그 : 당신이 그것을 위해 '내림차순'에 정렬합니다 클릭합니다 클릭하면,

<th><a href="?{% url_replace request 'order_by' 'name' '-' %}">Name</a></th> 

처음 : 다음

from urllib.parse import urlencode 
from collections import OrderedDict 

@register.simple_tag 
def url_replace(request, field, value, direction=''): 
    dict_ = request.GET.copy() 

    if field == 'order_by' and field in dict_.keys():   
     if dict_[field].startswith('-') and dict_[field].lstrip('-') == value: 
     dict_[field] = value 
     elif dict_[field].lstrip('-') == value: 
     dict_[field] = "-" + value 
     else: 
     dict_[field] = direction + value 
    else: 
     dict_[field] = direction + value 

    return urlencode(OrderedDict(sorted(dict_.items()))) 

당신이 위와 같이, 당신의 열 머리글에이 태그를 사용하여 같은 헤더가 다시 '오름차순'순서로 되돌아갑니다.

이 방법을 사용하면 페이지 매기기를 사용하는 경우 페이지 번호와 같은 URL의 다른 매개 변수도 유지됩니다. 별도의 라이브러리가 필요 없습니다. 꼭 확인해야 할 것은 뷰가 RequestContext를 템플릿으로 보내고 있다는 것입니다.

1

펠릭스 클링 이상 가장 투표 응답하고 mpaf 및 ngeek 클래스 기반 뷰를 사용하는 경우로 첨가에 계속 : 가 get_queryset (자체)에있어서의 정렬을 수행하고, 사용 :

<th><a href="?{% url_replace view.request 'order_by' 'name' '-' %}">Name</a></th> 

템플릿에서 요청하는 대신