2013-03-24 4 views
1

호텔이라는 카테고리가 포함 된 기사 모음 (정적 사이트 생성을 위해 pelican 사용)이 있습니다. 이 호텔들을 정리하고 싶습니다. 문제는 다른 기사가되지 않지만 단지 호텔 속성이 '도시'라는 점이다 이것은 분명히 다음과 같은 오류에 이르게 :속성을 사용할 수없는 경우 jinja2에서 정렬

{% for article in articles|sort(attribute='city') %} 
{% if article.category == 'hotels' %} 
    <a href="hotels/{{ article.slug }}.html"> 
    <p>{{ article.title }}</p> 
    </a> 
{% endif %} 
{% endfor %} 
: 여기
Caught exception "'pelican.contents.Article object' has no attribute 'city'". 

내가 사용하고있는 코드입니다

속성이 있는지 확인하고 오류가 발생하지 않도록 일부 기본값을 제공하는 방법이 있습니까?

답변

1

당신은 필터와 같은 for 루프로 if 문을 이동할 수 있습니다

for article in articles if article.category == 'hotels' | sort(attribute='city') 
+0

감사 등장 : CRITICAL : 'STR 객체가'더 속성 '도시'가 없습니다. 정렬이 기사의 모든 객체에 적용된 것 같습니다. – Trewq

0

당신은 호텔, Sean Vieira's answer를 참조만을을 반복하십시오. 당신이 이상 모든 기사를 반복하고 싶지만, 나머지는 임의의 순서에있는 동안 호텔 정렬 한 경우 macros를 사용하여 작업을 수행 할 수 있습니다

{% macro my_macro(article) %} 
    ... 
{% endmacro %} 

{% for a in articles if a.category == 'hotels' | sort(attribute='city') %} 
    {{ my_macro(a) }} 
{% endfor %} 

{% for a in articles if a.category != 'hotels' %} 
    {{ my_macro(a) }} 
{% endfor %} 

이것은 당신이 각 최초의 my_macro에 정의 된 모든 것을 포함 호텔, 원하는 순서대로, 그리고 호텔이 아닌 각 기사에 대해

+0

답장을 보내 주셔서 감사합니다. 나는 "CRITICAL : 'str object'속성에는 'city'가 없다." 내가 이것을 할 때 ... 션 비에이라의 대답에 나와있는 것과 동일합니다. – Trewq

0

비슷한 해결책을 찾고있는이 페이지를 발견했습니다. 결국, 조금 다르게 해결하고 다른 사람에게 도움이 될 수 있습니다.

내 템플릿 중 하나에서 'post_stats'플러그인이 수집 한 통계를 대략적인 읽기 시간에 추가했습니다. 모양은 다음과 같습니다

~{{ article.stats['read_mins']|default("0") }} min read 

그러나 플러그인이로드되지 않은 경우 'article'개체에 'stats'속성이 없으므로 렌더링이 실패합니다.

Jinja에는 변수가 정의되어 있는지 테스트 할 수있는 기본 테스트가 있습니다. 그래서, 나는 당신의 제안을 사용했을 때이있어 .. 힌트 션이 솔루션

~{{ article.stats['read_mins'] if article.stats is defined else "0" }} min read 
관련 문제