当前,我使用Express with EJS作为模板引擎。我的问题是,相对于嵌套视图中当前目录的路径,而不是相对于设置的基本视图目录而言的路径,而不求助于黑客。
我的views目录的结构如下
+--/views
|
+--partials/
| |
| +--header.ejs
| +--footer.ejs
|
+--pages/
| |
| +--blog/
| | |
| | +--new.ejs
| | +--show.ejs
| |
| +--landing.ejs
| +--(More files)
|
+--index.html
我正在用express设置视图目录
app.set('views', path.join(__dirname, 'views'));
在我使用的pages / landing.ejs中
<% include ../partials/header %>
在更深层的嵌套视图中,例如pages / blog / new.ejs
<% include ../../partials/header %>
它有效,我的意图是使用基本路径是相对于两个文件中的set view目录的,如下所示:
<% include partials/header %>
EJS本身支持吗?
答案 0 :(得分:1)
当前,EJS不支持此功能。但是,我在此答案EJS include file relative to project root
中描述了一种黑客行为希望能解决您的问题。
答案 1 :(得分:0)
我找到了解决办法。我不知道如果你在在线网站上使用它会发生什么!
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/",
}
app.js
文件中:const express = require("express");
const appLocals = require("./app.locals");
const app = express();
app.locals = appLocals;
<%- include(components + "post.ejs") %>
<%- include(partials + "header.ejs") %>
您不需要在 .ejs
文件中导入任何内容。您可以直接访问components
、partials
等
如果你知道更多,如果你可以改进代码,请写评论什么的。谢谢。