본문 바로가기
javascript/gulp

[템플릿] gulp-nunjucks-render : 기본 사용법

by by-choice 2021. 1. 7.
반응형

0. 파일트리

├─dist
├─node_modules
├─src
│   ├─html
│   │  ├─pages // 각 페이지가 들어갈 폴더
│   │  │ └─home.njk
│   │  └─templates // 템플릿이 들어갈 폴더
│   │    └─layout.njk
│   ├─img
│   ├─scss
│   └─js
├─gulpfile.js
├─package-lock.json
└─package.json

1. block

{% block 블럭명 %}
{% endblock %} 

템플릿 페이지 내, 각 페이지마다 다르게 들어갈 부분에 위의 태그를 삽입한다. 블럭명은 운영관리를 위해 들어갈 내용의 타이틀을 기입하는 것을 추천한다.

 

layout.njk:

<!DOCTYPE html>
<html>
<head>
  <title>title</title>
  <meta charset="utf-8" />
</head>
<body>
  <div>
    {% block content %}
    {% endblock %}
  </div>
</body>
</html>

2. extends

{% extends “가져올 탬플릿 위치” %}

각 페이지에서 템플릿을 가져오기 위해선 extends 태그와 동일명의 block 태그가 필요하다. 해당 페이지의 내용은 block 태그 안에 자리한다.

 

home.njk:

{% extends "../templates/layout.njk" %}

{% block content %}
	<p>HOME page</p>
{% endblock %}

결과물:

<!DOCTYPE html>
<html>
<head>
  <title>title</title>
  <meta charset="utf-8" />
</head>
<body>
  <div>
    
<p>HOME page</p>

  </div>
</body>
</html>

3. 변수

{{ 변수 }} <!-- 변수값 -->
{% set 변수 = “변수값” %} <!-- var 변수 = "변수값" -->

각 페이지마다 다른 값을 가지는 부분은 {{ 변수 }}로 지정하고, 해당 페이지 상단에 {% set 변수 = “변수값” %}을 지정한다. 꼭 최상단에 있어야하는 것은 아니고, 변수값을 요청하기 전에 선언되면 된다.

 

layout.njk:

<!DOCTYPE html>
<html>
<head>
  <title>{{ page_title }}</title> <!-- 변수값 삽입부분 -->
  <meta charset="utf-8" />
</head>
<body>
  <div>
    {% block content %}
    {% endblock %}
  </div>
</body>
</html>

home.njk:

{% set page_title = “Home” %} <!-- 변수와 변수 값 선언 -->
{% extends "../templates/layout.njk" %}

{% block content %}
	<p>HOME page</p>
{% endblock %}

결과물:

<!DOCTYPE html>
<html>
<head>
  <title>HOME</title>
  <meta charset="utf-8" />
</head>
<body>
  <div>
    
<p>HOME page</p>

  </div>
</body>
</html>

4. Include

extends는 이 페이지를 감싸 안아줄 템플릿을 불러온다 생각해보면, include는 이 페이지가 품을 템플릿을 가져온다고 생각할 수 있다. 즉 레이아웃 외에 부분적인 공통 영역을 위한 태그이다.

{% include “가져올 탬플릿 위치” %}

만약 include에 넘겨야 하는 변수값이 있다면, lnclude 위에 변수값({% set %})을 지정해줘야 오류가 발생하지 않는다.

{% set page-language = “en” %}
{% include “../parts/language.njk” %}

5. super(), 템플릿 상속

템플릿에서 {% block %}과 {% endblock %} 사이에 내용이 있을 경우, {% extends %}가 실행되면 기존 내용은 사라진다. 만약 기존 내용을 유지하고, 이어서 내용을 삽입하고 싶을 때는, 템플릿을 불러오는 쪽에 super()를 삽입하면 된다.

그리고 한 파일에, 여러개의 {% block %}을 지정해 줄 수 있다. 다만 블록 이름에 주의할 것.

 

layout.njk:

     {% block slide-script %}{% endblock %}
</head>
<body>
     <div class=“wrap”>
          {% block slide %}
               This is a test!
          {% endblock %}
     </div>
</body>

slide.njk:

{% extends “./layout.njk” %}

{% block slide-script %}
	{% include “./parts/script-slideshow.njk” %}
{% endblock %}

{% block slide %}
	{{ super() }} <!-- 기존 내용 유지용 -->
	<div id=slide_show_bg”>
		{% include “../parts/slideshow.njk” %}
	</div>
{% endblock %}

결과물: 

This is a test!

block slide의 내용

super() 미사용시, 아래와 같이 기존 내용 "This is a test!"은 block slide의 내용으로 대체된다.

block slide의 내용

 

2021/01/07 - [web/gulp] - gulp 설치 및 .src() .pipe() .dest() / 설명 추가

2021/01/07 - [web/gulp] - [템플릿] gulp-nunjucks-render : 기본 사용방법

2021/01/07 - [web/gulp] - [템플릿] gulp-nunjucks-render : function(if, for, marco)

반응형

댓글