Nunjucks动态页面模板

时间:2017-08-01 13:59:42

标签: javascript dynamic gulp nunjucks gulp-nunjucks-render

我使用nunjucks(gulp)作为模板语言,我想构建一个动态页面模板。

这是我的Json:

"pages": [
    {
        uname: "Welcome",
        title: "Page 1 Headline"
    },
    {
        uname: "About",
        title: "Page 2 Headline"
    }
]

目前我的每个页面都有一个静态页面(html)模板:

{% extends "layout.html" %}
{% set active_page = "Welcome" %} //<- This needs to be dynamicly
{% block content %}

<h1>{{ page[0].title }}</h1> //<- This needs to be dynamicly

我的第一个想法是阅读网址参数,但我无法以这种方式解决。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

解决方案很简单!

需要这样做:

index.njk

/g

page1.njk

<!-- set title !!! -->
{% set title = 'home page' %} <!-- set title !!! -->
{% extends "layout.njk" %}

{% block header %} {% include "parts/header.njk" %} {% endblock %}
{% block main %}
<main class="main">
    <!-- content -->
</main>
{% endblock %}
{% block footer %} {% include "parts/footer.njk" %} {% endblock %}

layout.njk

<!-- set title !!! -->
{% set title = 'page1' %}
{% extends "layout.njk" %}

{% block header %} {% include "parts/header.njk" %} {% endblock %}
{% block main %}
<main class="main">
    <!-- content -->
</main>
{% endblock %}
{% block footer %} {% include "parts/footer.njk" %} {% endblock %}

答案 1 :(得分:0)

如果您希望传递data.json文件中的数据

  1. 首先,您需要使用某种方式在数据文件本身中指定页面名称。
  2. 然后,您必须在nunjucks页面中将页面名称设置为变量。
  3. 现在您可以使用此变量名来获取与 您正在使用的页面。

data.json

{
    "pages": {
        "welcome": {
           "uname": "Welcome",
           "title": "Page 1 Headline"
        },
        "about": {
           "uname": "About",
           "title": "Page 2 Headline"
        },
    }
}

index.njk

{% set pageName = 'welcome' %}
{% extends "layout.html" %}
{% set active_page = "Welcome" %}
{% block content %}

<h1>{{ page[pageName].title }}</h1>

答案 2 :(得分:-1)

{% macro inc(file, folder) %}
    {% if folder %}
        {% set folderPATH = folder %}
    {% else %}
        {% set folderPATH = file %}
    {% endif %}
    {% set path = folderPATH + "/" + file + ".njk" %}
    {% include path %}
{% endmacro %}

{{ inc("menu") }} // {% include "menu/menu.njk" %}
{{ inc("content") }} // {% include "content/content.njk" %}