ejs包括不使用子文件夹

时间:2016-10-26 10:14:20

标签: node.js express template-engine ejs

我正在使用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中。

在搜索周围后,我尝试使用快速部分,但它没有多大帮助。

有任何线索吗?

干杯,乔瓦尼

5 个答案:

答案 0 :(得分:2)

jut像这样改变你的包含声明

<%- include("./partials/template/head.ejs") %>

这对我有用。

答案 1 :(得分:1)

我从未在<head>部分使用过EJS模板。

我一起使用ejsexpress-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;%”后面包含“ - ”。

希望这有帮助。