我正在使用express和ejs建立一个网站:
"dependencies": {
"ejs": "^2.5.2",
"express": "^4.14.0",
在我的app.js中我将ejs定义为模板引擎和视图的根目录:
app.set('view engine', 'ejs'); // set view engine
app.set('views', 'app/views'); // set custom root for view engine
然后我创建了我的index.ejs文件,其中包含了一个来自子目录的部分: index.ejs
<head><% include ./partials/template/head %></head>
文件夹结构:
- views
index.ejs
-- partials
-- -- template
head.ejs
启动服务器时,索引加载时没有错误但没有head部分。 如果我更改include(指向错误的位置),服务器无法开始突出显示问题,因此ejs能够找到head.ejs。 如果我在views目录中移动head.ejs,则头部正确加载到index.ejs中。 所以...我有点疑惑,似乎在子目录中文件读取但未加载到include中。
在搜索周围后,我尝试使用快速部分,但它没有多大帮助。
有任何线索吗?
干杯,乔瓦尼
答案 0 :(得分:2)
jut像这样改变你的包含声明
<%- include("./partials/template/head.ejs") %>
这对我有用。
答案 1 :(得分:1)
我从未在<head>
部分使用过EJS模板。
我一起使用ejs
和express-ejs-layouts
个包。
因此,如果您想要创建一个固定并显示在每个不同页面(可能是导航部分)的顶级部门,您可以为您的应用程序创建一个主要布局ejs。
当我使用res.render('index')
在路线上渲染EJS时,渲染的EJS页面(在我的情况下为index.ejs
)替换为下面示例中的<%- body %>
部分。
我使用带有navbar.ejs
行的<% include navbar %>
文件。并且导航栏固定地显示在每页的页面顶部。
实施例
app.js - needed variables, settings and middleware
var express = require('express')
var expressLayouts = require('express-ejs-layouts') // to use EJS layout
var app = express()
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(expressLayouts) // EJS Layout.ejs
layout.ejs文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<% include navbar %>
<%- body %>
<% include page_footer %>
</body>
</html>
答案 2 :(得分:1)
使用Express 4.0
<%- include hearder.ejs %>
这对我有用。
答案 3 :(得分:1)
使用Express 4.0使用&#34; ejs-mate模块
在app.js
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<timed exec> in <module>()
~/Stuff/Sources/anaconda3/envs/nlp/lib/python3.6/site-packages/gensim/models/phrases.py in __init__(self, phrases_model)
395 self.min_count = phrases_model.min_count
396 self.delimiter = phrases_model.delimiter
--> 397 self.scoring = phrases_model.scoring
398 self.phrasegrams = {}
399 corpus = pseudocorpus(phrases_model.vocab, phrases_model.delimiter)
AttributeError: 'Phrases' object has no attribute 'scoring'
在layout.ejs
中// Khởi tạo express
var express = require('express');
var app = express();
var engine = require('ejs-mate');
var port = process.env.PORT || 3000;
// Khởi tạo public, view engine...
app.use(express.static(__dirname + "/public"));
// Sử dụng đuôi html
var ejs = require("ejs");
app.set('view engine', 'ejs');
app.engine('ejs', engine);
// Cấu hình thư mục views
app.set("views", __dirname + '/views');
// Khởi tạo Web Server
var server = app.listen(port, function () {
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port);
});
app.get('/Admin', function (req, res) {
res.render('./admin/layout.ejs');
});
答案 4 :(得分:0)
我认为问题与子文件夹无关。如果你看一下你的代码:
<head><% include ./partials/template/head %></head>
我们可以看到使用了include指令,该指令将调用模板引擎并返回您希望在index.ejs的<head />
部分中呈现的html。
但是它不会被简单地渲染,因为你忘了包含一个“ - ”,它告诉它实际将内容打印到html的那个部分,你也可以使用“=”来做同样的事情只转义
所以要修复你应该按如下方式编辑你的index.ejs:
<head><%- include ./partials/template/head %></head>
请注意“&lt;%”后面包含“ - ”。
希望这有帮助。