본문 바로가기

Programming/Node.js

7. 익스프레스 (4) - 템플릿 엔진 : Nunjucks 6

node js logo image

 

 

○ extends와 block

 

include와도 함께 사용하며, 레이아웃을 지정하고 공통되는 레이아웃을 따로 관리할 수 있습니다. 일단 아래의 예제처럼, 레이아웃이 되는 파일에 공통되는 마크업을 넣고, 페이지마다 달라지는 부분을 block으로 선언해 둡니다. {% block [블록명] %}으로 block을 선언하고, {% endblock %}으로 블록을 종료합니다. 

 

 

[HTML]

<!DOCTYPE html>
<html>
    <head>
        <title>Express</title>
        <link rel="stylesheet" href="/style.css"  />
    </head>
    <body>
        <header>헤더입니다</header>
        <main>
            <p>내용입니다.</p>
        </main>
        <footer>푸터입니다</footer>
        <script src="/main.js"></script>
    </body>
</html>

 

 

[Nunjucks]

<!-- layout.html -->
 <!DOCTYPE html>
<html>
    <head>
        <title>{{title}}</title>
        <link rel="stylesheet" href="/style.css"  />
        {% block style %}
        {% endblock %}
    </head>
    <body>
        <header>헤더입니다</header>
        {% block content %}
        {% endblock %} 
        <footer>푸터입니다</footer>
        {% block script %}
        {% endblock %}
    </body>
</html>


<!-- body.html -->
{% extends 'layout.html' %}

{% block content %}
<main>
    <p>내용입니다.</p>
</main>
{% endblock %}

{% block script %}
<script src="/main.js"></script>
{% endblock %}

 

 

위의 body.html처럼, block이 되어주는 파일은 {% extends 경로 %}를 통해 레이아웃 파일을 지정하고 block을 선언합니다. 추후 익스프레스의 res.render('body')를 통해서 하나의 HTML로 합쳐져 렌더링이 되는데, 이름이 같은 block 부분이 합쳐지는 방식입니다.