我正在使用11ty构建静态网页。我将数据源创建为json文件,并将它们存储在全局可访问的_data目录中。
template.njk
{% for key, value in data %}
<div>
<span class="text-4xl">{{key}}</span>
<ul>
{% for item in value %}
<li>{{ item.country }}</li>
{% endfor %}
</ul>
</div>
{% endfor %}
_data
data_source_1.json
data_source_2.json
data_source_3.json
我不想有3个模板。我只想要一个模板。如何将每个数据源作为变量传递给模板?
11ty与周围的JavaScript框架/库不同。你不需要";引入";如果有多个来源,则每个模板上的所有数据。它可以通过"集合"中的Collections或global_ data文件来完成;创建一次,在任何地方使用";风格
查看关于从_data页面创建页面(和集合(的EggHead短视频:https://egghead.io/lessons/11ty-generate-eleventy-11ty-pages-from-external-data
这就像文档中使用负鼠阵列的基本示例,但前面的addAllPagesToCollections: true
行将创建全局可用的集合。
假设您在books.njk模板中添加另一个模板来显示_data源中的单个元素,并将所有元素添加到集合中。。。然后在任何没有";在前面的事项中引入数据";你可以:
{% for book in collections.books %}
## [ {{ book.data.title }} ]( {{ book.url }} )
{% endfor %}
这样你就可以拥有同样不同的";数据源";集合在单个页面上。当然,关于这个话题还有更多的话要说,但希望它能帮助你,并为你在文档中挖掘指明方向;一般在线。
编辑:
根据您的数据,如果不需要单独的页面,您也可以将全局_data页面直接存储在.json中,并在不创建集合的情况下循环使用它们。
_data/family.json
{
"possums":[
{
"name": "Fluffy",
"age": 2
},
{
"name": "Sparky",
"age": 3
},
{
"name": "Boby",
"age": 1
}
]
}
someTemplate.md
{% for possum in family.possums %}
{{ possum.name }} is {{possum.age}} years old
{% endfor %}
通过导出也可以将_data文件存储为.js,但对于小数据位,最简单的方法可以是.json方法。
大多数时候,您会有一个_data/website.json
文件,其中包含全局数据,如";名字,标语,随便什么;。
因此,在此基础上不能以这种方式完成:我的工作是为每个数据集制作一个专用模板。似乎挫败了拥有模板的目标。无论如何,我正在从定制的php和mysql后端构建数据和模板。