首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在gatsby中使用不同的模板创建页面

在 Gatsby 中,你可以使用不同的模板来创建页面。Gatsby 提供了多种方法来实现这一点,最常见的方法是使用 createPages API 在 gatsby-node.js 文件中动态创建页面,并为每个页面指定不同的模板。

以下是一个详细的步骤指南,展示了如何在 Gatsby 中使用不同的模板创建页面。

1. 创建模板文件

首先,创建不同的模板文件。例如,创建两个模板文件 src/templates/templateA.jssrc/templates/templateB.js

src/templates/templateA.js

代码语言:javascript
复制
import React from 'react';
import { graphql } from 'gatsby';

const TemplateA = ({ data }) => {
  const { markdownRemark } = data;
  const { frontmatter, html } = markdownRemark;

  return (
    <div>
      <h1>{frontmatter.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: html }} />
    </div>
  );
};

export const query = graphql`
  query($slug: String!) {
    markdownRemark(fields: { slug: { eq: $slug } }) {
      frontmatter {
        title
      }
      html
    }
  }
`;

export default TemplateA;

src/templates/templateB.js

代码语言:javascript
复制
import React from 'react';
import { graphql } from 'gatsby';

const TemplateB = ({ data }) => {
  const { markdownRemark } = data;
  const { frontmatter, html } = markdownRemark;

  return (
    <div>
      <h1>{frontmatter.title}</h1>
      <div dangerouslySetInnerHTML={{ __html: html }} />
    </div>
  );
};

export const query = graphql`
  query($slug: String!) {
    markdownRemark(fields: { slug: { eq: $slug } }) {
      frontmatter {
        title
      }
      html
    }
  }
`;

export default TemplateB;

2. 创建 Markdown 文件

src/content 目录下创建一些 Markdown 文件,并在文件的前置数据(frontmatter)中指定模板类型。

src/content/page1.md

代码语言:javascript
复制
---
title: "Page 1"
template: "templateA"
slug: "/page-1"
---

This is the content of Page 1.

src/content/page2.md

代码语言:javascript
复制
---
title: "Page 2"
template: "templateB"
slug: "/page-2"
---

This is the content of Page 2.

3. 配置 gatsby-node.js

gatsby-node.js 文件中,使用 createPages API 动态创建页面,并根据前置数据中的模板类型选择相应的模板。

代码语言:javascript
复制
const path = require('path');

exports.createPages = async ({ graphql, actions }) => {
  const { createPage } = actions;

  const result = await graphql(`
    {
      allMarkdownRemark {
        edges {
          node {
            frontmatter {
              slug
              template
            }
          }
        }
      }
    }
  `);

  if (result.errors) {
    console.error(result.errors);
    return;
  }

  const pages = result.data.allMarkdownRemark.edges;

  pages.forEach(({ node }) => {
    const template = node.frontmatter.template;
    const slug = node.frontmatter.slug;

    createPage({
      path: slug,
      component: path.resolve(`src/templates/${template}.js`),
      context: {
        slug: slug,
      },
    });
  });
};

4. 安装必要的插件

确保你已经安装了必要的插件,如 gatsby-source-filesystemgatsby-transformer-remark,并在 gatsby-config.js 中进行配置。

代码语言:javascript
复制
module.exports = {
  siteMetadata: {
    title: `Gatsby Site`,
  },
  plugins: [
    `gatsby-transformer-remark`,
    {
      resolve: `gatsby-source-filesystem`,
      options: {
        name: `content`,
        path: `${__dirname}/src/content`,
      },
    },
  ],
};

5. 运行 Gatsby 开发服务器

现在,你可以运行 Gatsby 开发服务器,并查看生成的页面。

代码语言:javascript
复制
gatsby develop

访问 http://localhost:8000/page-1http://localhost:8000/page-2,你会看到它们使用了不同的模板。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Angular Elements 组件在非angular 页面中使用的DEMO

如果页面引入该Js文件 ,就相当于在页面中新增了一个标签,所以在任意框架中都可以使用新标签,就像它是原生div一样。        ...于是我就尝试一下,看这个构建的angular elements 文件到底如果引入一个空白的页面中,引入后的组件在浏览器中又是如何呈现的。      页面结构:      ?...如果用chrome53以后的浏览器的话,可以不引入它。如果是其它浏览器,它是必须的。...当我引入external-dashboard-tile.native.js  文件时,就是用原生的方式引入了,看效果,页面上有了 #showdow-root节点,并且外部的bootstrap样式传递不进去了...按照以前看的文章说明,Native模式其实用的是Shadow Dom v0,并不是最新的技术,在2018.7.25号的6.1.0升级中,它又引入了新的封装方式ViewEncapsulation.Shadow

2.7K20
  • 用 Gatsby 创建一个博客

    为了解决我们想要的这个博客的功能,我们将使用以下插件: gatsby-plugin-catch-links 实现了历史 pushState API, 不需要页面重载就可以导航到博客的不同页面 gatsby-plugin-react-helmet...创建 React 模板 当 Gatsby 支持服务器端渲染(对字符串)的 React 组件时,我们可以使用 React 编写我们的模板( 也可以使用Preact )。...接下来:以编程方式创建必要的静态页面(并将模板注入)与 Gatsby 的 Node API,让我们开始吧。 此时需要注意的一点是,GraphQL 查询是在构建时进行的。...创建静态页面 Gatsby 公开了一个强大的Node API,它允许创建动态页面这样的功能(博客文章页!),扩展 babel 或 webpack 配置,修改所创建的节点或页面等。...你不知道,我们在 Gatsby 做到这一点有多容易,使用我们在博客模板中使用的类似策略,例如一个 React 组件和一个 GraphQL 查询。

    2.5K30

    logstash在Elasticsearch中创建的默认索引模板问题

    背景 在ELK架构中,使用logstash收集服务器中的日志并写入到Elasticsearch中,有时候需要对日志中的字段mapping进行特殊的设置,此时可以通过自定义模板template解决,但是因为...logstash默认会向Elasticsearch提交一个名为logstash的模板,所以在定义logstash配置文件时有一些关键点需要注意。...不使用logstash默认模板创建索引 如果不想使用logstash默认创建的模板创建索引,有两种解决方式,一是可以在logstash配置文件中的output中指定index索引名称, 如2.conf所示...注意此时logstash将不会提交创建名为logstash的模板。...使用自定义模板 使用自定义模板有两种方式,一种是启动logstash之前先调用Elasticsearch的API创建模板,并指定模板匹配的索引名称pattern以及模板优先级,具体可参考官方文档 https

    7.4K60

    在java中使用SPI创建可扩展的应用程序

    简介 什么是可扩展的应用程序呢?可扩展的意思是不需要修改原始代码,就可以扩展应用程序的功能。我们将应用程序做成插件或者模块。 这样可以在不修改原应用的基础上,对系统功能进行升级或者定制化。...Service Providers:这是SPI的具体实现,提供了具体的实现功能 SPI Configuration File:SPI的配置文件,通过在配置文件我们来配置相关的SPI发现信息。...为了更好的展示扩展应用的实际使用,我们分别创建4个模块。在实际应用中,只需要将这些jar包加入应用程序的classpath即可。...SPI在JPMS模块化系统下的实现 上面我们讲的是基本的操作,考虑一下,如果是在JDK9之后,引入了JPMS模块化系统之后,应该怎么使用SPI呢? 代码肯定是一样,我们需要修改的是SPI配置文件。...总结 本文介绍了SPI在模块化和非模块化系统中的应用。

    1.5K41

    在Docker中使用Open vSwitch创建跨主机的容器网络

    这是种多租户、多主机的解决方案。 在”overlay”模式下,OVN可以用来创建跨主机的容器间网络。此模式是单租户(当然在不需要额外的网络隔离的情况下可以拓展成多租户)、多主机的解决方案。...创建逻辑交换机 使用以下命令创建一个名为foo,子网为192.168.1.0/24的逻辑交换机。 ? 列出所有逻辑交换机 ?...创建Open vSwitch桥接 如果你的虚拟机只有一个网卡(如’eth0′),你创建一个名为breth0的网桥,然后将eth0网卡上的IP和路由信息全部转移到网桥上。...如果你使用DHCP服务获取IP地址,首先需要停掉在物理网卡(如eth0)上监听的DHCP客户端,然后在新创建的网桥(如breth0)上启动监听。...根据你的虚拟机的不同,你需要把以上操作设置到启动脚本中。

    2.3K100

    如何利用机器学习和Gatsby.js创建假新闻网站​

    (1)使用gatsby new [yoursite -name]完全从头开始, (2)使用gatsby new [yoursite -name] [starter-git-url]的启动模板, (3)使用我发布在...下载插件后,可以将其添加到gatsby-config.js中。 下面是这个项目的文件。 ? 如你所见,在这个项目中使用了许多不同的插件,这些插件可以帮助我们节省时间和精力。...gatsby-ssr.js 此文件用于实现服务器端选然的api。我们不会在这个项目中使用。 布局设置 网站布局是一个非常重要的方面。...创建页面的两个大步骤是: 1)为本地文件系统中的每个标记文件创建slugs(或唯一的url) 2)使用页面模板使用slugs和通过GraphQL获取的其他信息创建实际的web页面。...中,为每个markdown文件创建数据节点,然后所有这些节点将与页面模板一起使用,以创建实际的页面。

    4.5K60

    进击的JAMStack

    而Stack用中文的说法就是技术栈(Tech Stack),也就是我们在构建应用的时候具体使用到的技术的集合。...(动态内容) 细心的你一定注意到了我在上面每个功能点的右边标出了这个功能是静态的还是动态的。所谓静态的内容就是那些不会经常发生变化的内容,这些内容在一段时间内不同用户访问的时候都会得到同样的结果。...templates: 网站的模板文件夹,该文件夹底下只有一个叫做blog-post.js的模板文件,在Gatsby构建网站的时候blogs文件夹底下的每一个Markdown文件都会通过这个模板文件生成一个对应的...由于这些应用的内容都是由平台用户创建的,而且用户可以不断地修改和删除已经创建的内容,如果使用JAMStack的话网站的内容就需要被频繁构建,这显然是不合理的。 微博,推特这种社交应用。...我的个人思考 在最后我想说一下我自己对JAMStack的一些思考。 首先我个人十分看好这个技术栈,也会在日后的开发中使用这个技术栈。因为它帮我解决了网站SEO的问题。

    2.9K30

    h5页面在不同iOS设备上的问题总结

    在做文章评论的功能时,会遇到很多兼容性的问题,在不同机型上的表现也很不一致,总结了以下这些问题。 1. 日期问题 对于yyyy-mm-dd hh:mm:ss 这种格式在ios系统不识别。...时间格式化的时候,在浏览器端处理好好的,到了手机端,就变成NAN,或者null,这种情况,是ios系统不能转化这种类型的时间。...这种问题,在网上查了很多解决方案,大致是在blur事件中,让页面滚动一下 window.scrollTo(0, scroll); 但是有一个很严重的问题:如果页面上有按钮需要操作 ,例如,评论的输入框+...3. ios12在微信小程序的webview,键盘收回,页面底部会留白 这个问题怀疑是页面的scroll设置了auto导致的。 解决方案:滚动一下页面,请参考链接,代码有效。...键盘遮挡输入框 输入框如果使用了fixed固定在底部,键盘顶起的时候,iphone上fixed会失效,导致页面滚动输入框会随着页面滚动,并且在部分机型上,输入框偶尔会被键盘遮挡,这种偶现的问题,很不友好

    1.9K20

    在JS中使用强大的CSS选择器来定位页面元素

    连忙打开手机访问验证了下一切都是正常的,切换到电脑访问(用的是Edge浏览器)也是正常,难道真的是个别现象吗?...直接在浏览器终端窗口中使用 JS 语法进行了快速验证,得到的答案是可行的。...相比于 JS 中使用 ID 或名称来定位页面元素的方式,这种使用 CSS 选择器的模式,操作起来会更的加简便和灵活。...好啦,问题也是得到了圆满的解决,此次“事故”也是给自己提了个醒,不仅要注重代码的规范,而且在架构设计上面也要多下点功夫。...看来对于 hugo-theme-next 主题的代码架构评审的工作得加紧啦,毕竟使用的用户也在逐步增长中,得对大家的信赖“负责”才是。

    6410

    一杯茶的时间,上手 Gatsby 搭建个人博客

    在 Gatsby 中,根据 js 文件的位置不同,使用 GraphQL 有两种形式,且 Gatsby 对其做了魔法,在 src/pages 下的页面可以直接 export GraphQL 查询,在其它页面需要用...Gatsby 如何生成特定页面 一般来说,在 /src/pages/ 目录下的组件会自动生成相应路径的页面,但如果是其它类型的文件就不会了。...创建页面 回到我们前面的查询[25],得到需要的数据之后只需要对每个页面调用 actions.createPage 即可。...首先是普通的文章页面生成,这个是在 createPages 钩子中,如果你的博客只有文章用到 Markdown 的话,可以在 GraphQL 查询中直接过滤,否则我们用前面文章的方法,先取所有 Markdown...上下篇 在文章页面中我们通常会加入上下篇来引导继续浏览。这里我们同样在 createPages 钩子中处理,但这回我们添加到 context 域中,这个域里的数据会作为 props 传到模板组件中。

    3.2K20

    创建 React 应用的 7 种方式,你用过几种?

    通过 Gatsby 建立的网站,很容易被搜索引擎检索到,而且页面的渲染性能非常好,完美支持个人网站、博客、文档网站,甚至是电子商务网站。...创建 gatsby 应用 npm init gatsby 在命令行中选择开发语言,是否使用 CMS、是否支持、md、mdx 等 创建完成后,在命令行运行 npm run dev,打开 http://localhost...,然后在函数中使用查询的数据进行渲染。...创建 umi 应用 如果要快速上手 umijs,可以使用它提供的脚手架工具 create-umi npx create-umi@latest 在创建过程中,会提示选择模板,选择「Simple App」模板即可...例如创建一个 React 项目: 打开 StackBlitz 网站,并点击右上角的新建按钮。 在弹出的新建项目对话框中,选择 React 模板,并输入项目名称,点击确定按钮。

    7.4K10

    【Web架构】静态站点生成器概述 Gatsby ,Hugo 和Jekyll对比

    虽然您可以手动创建静态站点,但这样做有很多缺点。这可能是一个困难的过程,当您打算进行更改时,许多问题会浮出水面,而扩展不是您所期待的。...由于有了GraphQL, Gatsby可以生成能够访问和利用来自不同来源的数据的站点。 您将在使用Gatsby时看到,生成的站点是进步的Web应用程序。...雨果(Hugo) 开发人员称之为“世界上最快的网站构建框架”(Hugo),这绝非偶然。 《雨果》是用Golang 写成的,于2014年发行。...变身怪医(Jekyll) Jekyll由Tom Preston-Werner在2009年发布,是这个列表中最老的静态站点生成器。 Jekyll是用Ruby编写的,全世界都在使用。...虽然Jekyll对页面内容使用Markdown,但它也使用液体模板语言来处理页面。Jekyll也使用Sass,这对于喜欢CSS预处理器的开发人员来说非常重要。

    3.1K20

    混合渲染模式:SSG 与其他技术的结合

    与此不同,SSG 的理念是通过在构建阶段预先生成静态 HTML 页面,这些页面在用户请求时无需经过服务器端计算,直接从 CDN 或服务器中返回。...模板渲染:工具会结合获取的数据和预定义的模板,生成完整的 HTML 页面。静态资源生成:除了 HTML 页面,SSG 还会生成关联的 CSS、JavaScript 和其他静态资源。...通过 getStaticProps 方法,开发者可以在构建时获取数据并生成静态页面。Gatsby:这是一个基于 React 的 SSG 框架,以其丰富的插件系统和 GraphQL 数据查询功能而闻名。...Gatsby 非常适合内容驱动型网站,比如博客和营销页面。Hugo:这是一个用 Go 编写的高性能 SSG 工具,常用于技术博客和文档站点的构建。Hugo 的速度是其最大优势。...其主要操作包括:数据导入:通过 Gatsby 的数据层,连接原有 CMS 数据库,并通过 GraphQL 查询内容。模板创建:为课程页面、博客文章和评论等内容定义不同的 React 模板。

    10000

    学习gatsby,从这里开始!

    使用场景 如果你有一堆用 Markdown 编辑的文章,想要发布到网上,又不想浪费时间在编辑排版上,那么用 Gatsby 生成一个博客网站,是一个非常不错的解决方案。...--- 二、Gatsby 简介 1、图解系统结构 数据统一:从 不同数据源(下图中 CMS、Private API 等) 获取数据,形成统一的数据结构( GraphQL Data Layer) 数据查询...--- 4、使用 MDX 文件新增页面 MDX文件是指 在 markdown 文件中直接插入 jsx 代码 的混合文件,怎么用在Gatsby中?详细步骤,看这里!...--- 4、head HTML中head部分的数据对于 SEO 极其重要,用 bolog 模板生成的 Gatsby 项目,已经生成了SEO组件(src/components/seo.js),直接使用,完成页面...同样也可以在阿里云上购买一个ESC; 第三步:在阿里云后台设置域名解析到第二步的服务器; 第四步:在服务器上安装nginx; 第五步:在开发机器上编译 gatsby 项目 gatsby clean gatsby

    2.3K20

    你的博客用不着什么JavaScript框架

    这里就有些不对劲——Gatsby 需要你以 React 组件的形式再加载一次页面;在完成多出来的这一步之前,所有需要 JavaScript 的元素(例如按钮、菜单、自定义输入)实际上都不能交互。...静态渲染和水化的页面还是比完全客户端渲染的 React 应用(如 create-react-app 生成的页面)要好得多,后者没有 JavaScript 就没法用。...用更少的 JavaScript 构建 Gatsby 网站 这使我陷入了一个两难境地:使用 Gatsby 开发网站是绝妙的体验;但是开发体验(DX)应该永远排在用户体验(UX)之后。...Gatsby Starter Low Tech 博客使用 no-javascript 插件和其他一些技术(包括将所有图像转换为灰度),来帮助你创建一个轻量且节能的博客。...Eleventry 还有一些让我感到困惑的事情:我有一阵子一直搞不懂它的分页功能,认为它只是将帖子分页到指定大小的一些组中,之后才意识到它可以动态生成全新的页面;我还发现自己在同一文件中混用了模板语言:

    4.1K10

    2018 年前端开发五大趋势

    但是,由于这些数据可能来自不同的来源(例如,如果帖子存储在 MongoDB或Redis中),生成的应用将比舒适的工作慢得多。...与 Jekyll,Hugo 或 Hexo 等流行解决方案不同,这个静态生成器不使用模板,而是信赖于 Webpack 和 React 组件(注意 React 官网本身也是在 Gatsby 的帮助下编写的)...因此,你可以获得自动更新和即时页面转换等优势。从1.0版本开始,Gatsby 使用了上面提到的 GraphQL。...即使是最受欢迎的那些,比如 Joomla 或 Wordpress,也会以需要及时更新或安全性不足的形式给它们的用户带来麻烦(经验丰富的黑客在攻击你的网站上未更新的关键插件时会遇到些麻烦,这是为了在以后的欺诈活动中使用它...除了我们上面描述的明显的优势外,这种页面有一个重要的缺点 —— 它的内容不容易被编辑。静态网站生成器专门用于解决此问题,Gatsby 是其中最好的,感谢 GraphQL。

    2.9K40
    领券