【问题标题】:11ty multiple data sources for one template一个模板 110 个多个数据源
【发布时间】:2022-01-15 02:20:35
【问题描述】:

我正在使用 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 个模板。我只想要一个模板。 如何将每个数据源作为变量传递给模板?

【问题讨论】:

  • 好的,我开始认为这在这个系统中是不可能的。如果我没有很快得到答案,我会将我的工作作为解决方案发布;-)

标签: nunjucks eleventy


【解决方案1】:

11ty 与周围的 JavaScript 框架/库不同。如果有多个来源,您不需要在每个模板上“引入”所有数据。它可以通过集合或全局 _data 文件以“创建一次,随处使用”的方式来完成。

查看关于从 _data 页面创建页面(和集合)的 EggHead 短视频:https://egghead.io/lessons/11ty-generate-eleventy-11ty-pages-from-external-data

类似于文档中带有 possums 数组的基本示例,但前面的 addAllPagesToCollections: true 行将创建全局可用的集合。

假设您添加另一个模板以显示来自 _data 源的单个元素并将所有元素添加到集合中,在 books.njk 模板中...然后在任何页面上没有“在前面引入数据”您可以:

{% 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 文件,其中包含“名称、标语等”之类的全局数据。

【讨论】:

  • 感谢您的回复。所以,要清楚你在前面的问题中使用分页功能,你可以在哪里给出数据文件的位置?我之前尝试过,觉得这是一个黑客,但如果这是这样做的方式,我会继续努力.....
  • 感谢您的帮助。我接受您的回答,因为我认为它显示了 11ty 方式。尽管在我的情况下,通过分页使用集合似乎并不能解决问题。您使用命名数据源的其他建议是我将使用的,但我希望它可以作为变量传递
  • 很高兴它有帮助。您可以查看文档中的“短代码”。它是在 JavaScript 中完成的,因此您可以导入数据并进行调整以满足您的需求,然后在模板中使用它。一种方式另一种方式......快乐的编码。
【解决方案2】:

因此,基于它不能以这种方式完成: 我的工作是为每个数据集制作一个专用模板。似乎打败了拥有模板的对象。无论如何,我正在从定制的 php 和 mysql 后端构建数据和模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2020-09-02
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多