【问题标题】:EJS including partials in nested directories relative to set views pathEJS 包括嵌套目录中相对于设置视图路径的部分
【发布时间】:2021-03-19 03:08:53
【问题描述】:

目前我使用 Express 和 EJS 作为模板引擎。我的问题是路径是相对于嵌套视图中的当前目录而不是设置的基本视图目录而不诉诸黑客。

我的views目录结构如下

+--/views
  |
  +--partials/
  | |
  | +--header.ejs
  | +--footer.ejs
  |
  +--pages/
  | |
  | +--blog/
  | | |
  | | +--new.ejs
  | | +--show.ejs
  | |
  | +--landing.ejs
  | +--(More files)
  |
  +--index.html

我在 express 中设置一个 views 目录

app.set('views', path.join(__dirname, 'views'));

在 pages/landing.ejs 我使用

<% include ../partials/header %>

在更深层的嵌套视图中,例如 pages/blog/new.ejs

<% include ../../partials/header %>

它有效,我的意图是使用基本路径相对于两个文件中的设置视图目录,如下所示:

<% include partials/header %>

EJS 是否原生支持此功能?

【问题讨论】:

标签: node.js express ejs


【解决方案1】:

目前,EJS 不支持此功能。但是,我在这个答案中描述了一个黑客EJS include file relative to project root

希望能解决您的问题。

【讨论】:

  • 发帖前我已经看到你的回答了,谢谢你的解决方案。我希望有一个不求助于黑客的东西。我会研究替代引擎,因为我似乎经常遇到 EJS(s) 限制。
【解决方案2】:

我找到了解决办法。我不知道如果你在在线网站上使用它会发生什么!。

  1. 首先创建一个名为app.locals.js 的文件,并在其中写入以下代码:
module.exports = {
    static: process.cwd() + "/static/",
    views: process.cwd() + "/views/",
    layouts: process.cwd() + "/views/layouts/",
    pages: process.cwd() + "/views/pages/",
    partials: process.cwd() + "/views/partials/",
    components: process.cwd() + "/views/components/",
}
  1. app.js 文件中:
const express = require("express");
const appLocals = require("./app.locals");

const app = express();
app.locals = appLocals;
  1. 像这样使用它:
<%- include(components + "post.ejs") %>
<%- include(partials + "header.ejs") %>

您无需在.ejs 文件中导入任何内容。可以直接访问componentspartials等。

如果你知道更多,如果你能改进代码,请写评论什么的。谢谢。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2018-04-26
    相关资源
    最近更新 更多