11一个模板有多个数据源



我正在使用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后端构建数据和模板。

相关内容

  • 没有找到相关文章

最新更新