[Jekyll] 포스트 요약문 가져오기를 위한 excerpt 사용법 및 옵션 소개

Jekyll 블로그의 메인 페이지 등을 작성할 때, 포스트의 내용을 일부 발췌하고자 할 경우 excerpt 변수를 사용한다1. 아무 옵션 없이 사용할 경우 포스트의 단순히 첫 문단을 모두 가져오므로, 본격적으로 사용하려면 특정 부분까지 잘라내는 등의 옵션을 사용할 필요가 있다. excerpt 변수에 대해 Jekyll Variable 안내 페이지Jekyll Writing Post 안내 페이지에 간단히 설명되어 있지만, 일부 설정 옵션에 대한 설명이 미흡하다. 편의를 위해 excerpt와 같이 사용하면 좋은 옵션들을2 이 포스트에 정리해보고자 한다.

1. 일반적인 사용 (옵션 미사용)

가장 단순한 예제로 포스트의 제목과 메타 데이터, 첫 문단만을 가져오려면 아래와 같이 구성하면 된다.

../index.html

...

{% for post in site.posts %}
    <div class="home-post-list">
        <h4><a href="{{ post.url }}" class="link-post_list">{{ post.title }}</a></h4>        
        <p class="post-meta">
            {{ post.date | date: "%b %d, %Y" }} by {{ post.author }}
        </p>
        <div class="post-list-content">
            {{ post.excerpt }}
            <p class="text-right"><a href="{{ post.url }}">read more...</a></p>
        </div>
    </div>
{% endfor %}

...

2. 구분자 사용 (excerpt_seperator)

구분자를 사용하면 포스트를 작성할 때 글의 어느 위치까지 요약문에 포함시킬 것인지 미리 지정할 수 있다. _config.yml 파일에 구분자로 사용할 문구를 등록해두고, 포스트를 작성할 때 원하는 위치에 구분자를 넣어두는 식으로 사용한다.

../_config.yml

...

excerpt_seperator:  <!--break-->

...

../_posts/YYYY-MM-DD-post.md

...

구분자를 사용하면 이 위치까지
<!--break-->
요약문에 포함된다.

...

요약문을 표시할 문서에서는 위 1번과 같이 단순히 {{ post.excerpt }}만 사용하면 된다.

3. 글자/단어 수 제한 (truncate/truncatewords)

구분자를 사용하는 것은 요약문의 길이를 섬세하게 조정할 수 있는 좋은 방법이지만, 포스트를 작성할 때마다 적절한 위치를 찾아 구분자를 넣어야 하는 불편함이 있다. 요약문을 가져올 때 글자 수 혹은 단어 수를 정해진 만큼만 가져오게 설정하면 매번 요약문의 길이를 설정할 필요가 없어 편리하다. 글자 수를 제한할 때는 truncate 필터를 사용하고, 단어 수를 제한할 때는 truncatewords 필터를 사용한다.

../index.html

...

{{ post.excerpt | truncatewords: 45, '...' }}

...

Liquid 필터를 사용할 때는 위와 같이 구분자 |를 사용하며, truncate: 혹은 truncatewords: 뒤에 숫자를 기입한다. 요약문 뒤에 말줄임표 등을 표시하고 싶을 경우, 쉼표를 쓰고 그 뒤에 사용할 말줄임표를 기입하는 식으로 사용이 가능하다.

4. html 코드 제거 (strip_html)

excerpt를 사용하면 글 내용뿐만 아니라 html 코드도 함께 가져오게 된다. 만일 이 html 코드를 제거하고 텍스트만 가져오고자 할 경우 strip_html 필터를 사용하자.

../index.html

...

{{ post.excerpt | strip_html }}
<!--당연하지만 여러개의 필터를 동시에 사용하는 것도 가능하다.-->
{{ post.excerpt | strip_html | truncatewords: 45 }}

...

5. 줄바꿈 제거 (strip_newlines)

excerpt는 기본적으로 첫 문단을 가져오므로, truncatewords 등의 필터를 사용해 지정한 단어 수만큼 글내용을 가져오도록 설정하여도 첫 문단의 단어 수가 설정한 단어 수보다 작을 경우 다음 문단의 내용을 가져오지 않고 첫 문단까지만 가져온다. strip_newlines 필터를 사용해 줄바꿈을 제거하면 문단 구분이 없어지므로 첫 문단이 짧아서 생길 수 있는 문제들을 피할 수 있다.

../index.html

...

{{ post.excerpt | strip_newlines }}

...
  1. page.excerpt 형태로 사용하면 된다. Jekyll Variable 안내 페이지 참조. 

  2. 사실 Liquid 태그에 적용하는 필터이다. 이 곳에서 Liquid 필터에 대한 설명을 찾을 수 있다.