【发布时间】:2020-06-25 02:20:46
【问题描述】:
我有一个 Django CMS 作为我的后端应用程序。我正在尝试在我的 Gatsby 前端站点中动态创建页面。我的 Django 应用程序使用 Graphene 通过 GraphQL 公开。但我无法从后端 CMS 查询 slug 并使用 gatsby-node.js 创建页面。在后端应用中创建页面时如何创建页面?
想法是
//gatsby-node.js
exports.createPages = ({ graphql, actions }) => {
const pages = graphql`
{
blogPages{
edges{
node{
slug // this slug supposed to come from the backend CMS (Atleast i think)
}
}
}
}
`;
const { createPage } = actions
const blogTemplate = path.resolve(`src/templates/blogTemplate.js`);
pages.blogPages.edges.forEach(edge => { //this should help to create dynamic pages - slug coming from backend CMS
const slug = edge.node.blogpage.slug;
createPage({
path: slug,
component: blogTemplate
})
})
}
【问题讨论】:
-
你能在 graphiql 中查询
blogPages吗? -
从后端我可以使用 graphiql 进行查询。从前端我可以使用 apollo 在组件中动态地进行查询。我决定不使用 gatsby-source-wagtail,因为它没有给我动态查询(如果我在后端 CMS 中创建新节点,则不会更新,除非重新构建应用程序以进行构建 - 重新获取间隔仅适用于开发环境)
-
createPage只能在 build/dev 中使用 - 部署的站点可以上传到静态服务器然后 没有动态页面创建的可能性 - 只有动态数据加载/js/react /apollo [client-side] 逻辑 - 使用 webhook 构建(重新部署)整个站点 -
同意@xadm。您可能首先使用
gatsby-source-graphql有一些运气,这样createPages步骤就成为可能。当您在 Django CMS 中创建新页面时,触发与您的主机的 webhook 以重建项目,获取新创建的内容。 -
感谢@xadm,那么在这种情况下,是否有可能执行 apollo 客户端逻辑来获取某些组件中的 slug 并将结果导入 gatsby-node.js .. 或者这个想法完全反对gatsby-node.js 的生命周期