Jinja2에서 목록을 어떻게 정렬합니까?


88

나는 이것을 시도하고있다 :

 {% for movie in movie_list | sort(movie.rating) %}

하지만 그건 옳지 않습니다 ... 문서가 모호합니다 ... 진자 2에서 어떻게 이걸하나요?

답변:


170

버전 2.6부터 Jinja2의 내장 정렬 필터를 사용하면 정렬 기준으로 속성을 지정할 수 있습니다.

{% for movie in movie_list|sort(attribute='rating') %}

http://jinja.pocoo.org/docs/templates/#sort 참조


고마워요, 그게 제가 원했던 것입니다 그건 그렇고, 두 유형의 속성 모두에서 작동 합니까 ... getattrgetitem 을 알고 있습니까? (I는 "영화"개체 또는 사전되었는지 기억할 수 없기 때문에)
닉 퍼킨스

@Nick : 빠른 테스트를했는데 객체와 사전 모두에서 작동하는 것 같았습니다.
Steve S

2
니스, 이것은 또한 튜플 지수 작동 :list_of_tuples|sort(attribute='0')
나빈

값을 역순으로 표시하는 것이 편리 할 수 ​​있습니다 (예를 들어 등급에 대해 흥미로울 수 있음).이 경우 옵션을 사용하기 만하면됩니다 reverse=True.
Romain

25

오름차순으로 정렬하려면

{% for movie in movie_list|sort(attribute='rating') %}

내림차순으로 정렬하려면

{% for movie in movie_list|sort(attribute='rating', reverse = True) %}

14

보통 우리는 Jinja2에게주기 전에 목록을 정렬합니다. Jinja의 키를 지정할 수있는 방법은 없습니다.sort 필터에 .

그러나 항상 시도 할 수 있습니다. {% for movie in movie_list|sort %} . 그것이 구문입니다. 정렬을 위해 어떤 종류의 주요 정보도 제공 할 수 없습니다.

이에 대한 사용자 지정 필터를 시도하고 작성할 수도 있습니다. Jinja2에 데이터를 제공하기 전에 정렬 할 수 있으면 어리석은 것 같습니다.

경우 movie_list객체의 목록입니다, 당신은 다양한 비교 방법 (정의 할 수 있습니다 __lt__, __gt__그 객체의 클래스 등).

경우 movie_list튜플 또는 목록의 목록입니다, 등급이 먼저 있어야합니다. 아니면 Jinja2 밖에서 정렬을해야합니다.

경우 movie_list사전의 목록입니다, 당신은 사용할 수있는 dictsort정렬의 주요 사양을 수용 않는다. http://jinja.pocoo.org/2/documentation/templates#dictsort 를 읽어보십시오 .


알았어 고마워. 템플릿으로 보내기 전에 Python에서 정렬을 끝냈습니다. <code> movie_list = sorted (movie_list, key = lambda movie : movie.rating, reverse = True) </ code> 너무 나쁩니다. 템플릿이 결정하도록하는 것이 좋습니다. 정렬 순서! (다른 템플릿 엔진이이 작업을 수행 할 수 있습니까?)
Nick Perkins

2
Jinja2의 최신 버전에서는 이제 정렬 기준으로 속성을 지정할 수 있습니다.
Steve S

1
@Steve S : 흥미 롭군요. 실제로 새로운 정보로 답변 을 게시 할 수 있습니까? 버전 번호를 포함하십시오.
S.Lott 2011 년

1
작은 정정 : 확인 후 소스를 나는 (예에 의한 수익으로 목록이 튜플 구성되어 경우에 인덱스를 지정하는 것이 가능하다는 것을 발견 dict.items()) :sort(attribut='1')
루카스 CIMON

@SLott-템플릿에서 정렬을위한 사용 사례는 다음과 같습니다. 동일한 데이터의 여러 뷰를 렌더링 할 수있는 디스플레이 레이어입니다. 이들은 두 개의 개별 팀이 될 수 있습니다. 디스플레이 레이어에서 다시 작동하지 않는 이유는 무엇입니까? 우려의 결합을 끊기에 좋은 장소 인 것 같습니다.
Shane C. Mason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.