PugJs - 找不到模板文件/忽略目录
PugJs - template file not found / directory ignored
我有一个应该输出少量内容的简单应用程序。我使用 NodeJs、Express 和 Pug。
const pug = require('pug');
const express = require('express');
const app = express();
const indexFile = 'index'; // the file to load
app.set('view engine', 'pug'); // use pug
app.get('/', function (req, res) {
res.render(indexFile, { templateToLoad: 'Views/Templates/temp.pug' }); // include a template file
});
app.listen(8888, function () {
console.log('Server running on port 8888');
});
还有我的 Pug 文件 / HTML
doctype html
html
body
p default content on all pages
include templateToLoad
我的目录是这样的
启动服务器时我收到此错误消息
Error: ENOENT: no such file or directory, open 'C:\Users\mah\Desktop\Test\views\templateToLoad.pug'
at C:\Users\mah\Desktop\Test\views\index.pug line 5
at Object.fs.openSync (fs.js:584:18)
at Object.fs.readFileSync (fs.js:491:33)
at Function.read (C:\Users\mah\Desktop\Test\node_modules\pug-load\index.js:69:13)
at Object.read (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:147:25)
at C:\Users\mah\Desktop\Test\node_modules\pug-load\index.js:24:25
at walkAST (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:23:18)
at C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:104:20
at Array.reduce (native)
at walkAndMergeNodes (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:103:18)
at walkAST (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:37:19)
但是在调试时 templateToLoad
我得到 'Views/Templates/temp.pug'
。为什么文件夹 Templates
被忽略?
做了一些挖掘 - 哈巴狗似乎不支持动态包含(你在这里尝试做的)
https://github.com/pugjs/pug/issues/569
可能的解决方法包括使用 jade.render
或重新使用 res.render
自身来生成模板。
- workaround-to-dynamic-includes-in-pug-jade
- use-a-variable-in-a-jade-include
哈巴狗中的动态包含 not supported。
我建议您发送模板名称并在 index.pug 中使用 conditionals 来显示所需的模板。
注意:temp1
、temp2
... tempN
需要存在于您的 Templates
文件夹中
doctype html
html
body
p default content on all pages
if templateToLoad == "temp1"
include Templates/temp
else if templateToLoad == "temp2"
include Templates/temp2
发送模板名称。
app.get('/', function (req, res) {
res.render(indexFile, { templateToLoad: 'temp1' }); // include a template file
});
Pug 提出模板继承https://pugjs.org/language/inheritance.html
所以不是渲染 index.pug,而是渲染你的模板 :
index.pug :
doctype html
html
body
p default content on all pages
block content
temp.pug :
extends index.pug
block content
p My template
你的server.js
app.get('/', function (req, res) {
res.render('temp');
});
我有一个应该输出少量内容的简单应用程序。我使用 NodeJs、Express 和 Pug。
const pug = require('pug');
const express = require('express');
const app = express();
const indexFile = 'index'; // the file to load
app.set('view engine', 'pug'); // use pug
app.get('/', function (req, res) {
res.render(indexFile, { templateToLoad: 'Views/Templates/temp.pug' }); // include a template file
});
app.listen(8888, function () {
console.log('Server running on port 8888');
});
还有我的 Pug 文件 / HTML
doctype html
html
body
p default content on all pages
include templateToLoad
我的目录是这样的
启动服务器时我收到此错误消息
Error: ENOENT: no such file or directory, open 'C:\Users\mah\Desktop\Test\views\templateToLoad.pug'
at C:\Users\mah\Desktop\Test\views\index.pug line 5
at Object.fs.openSync (fs.js:584:18)
at Object.fs.readFileSync (fs.js:491:33)
at Function.read (C:\Users\mah\Desktop\Test\node_modules\pug-load\index.js:69:13)
at Object.read (C:\Users\mah\Desktop\Test\node_modules\pug\lib\index.js:147:25)
at C:\Users\mah\Desktop\Test\node_modules\pug-load\index.js:24:25
at walkAST (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:23:18)
at C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:104:20
at Array.reduce (native)
at walkAndMergeNodes (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:103:18)
at walkAST (C:\Users\mah\Desktop\Test\node_modules\pug-walk\index.js:37:19)
但是在调试时 templateToLoad
我得到 'Views/Templates/temp.pug'
。为什么文件夹 Templates
被忽略?
做了一些挖掘 - 哈巴狗似乎不支持动态包含(你在这里尝试做的)
https://github.com/pugjs/pug/issues/569
可能的解决方法包括使用 jade.render
或重新使用 res.render
自身来生成模板。
- workaround-to-dynamic-includes-in-pug-jade
- use-a-variable-in-a-jade-include
哈巴狗中的动态包含 not supported。 我建议您发送模板名称并在 index.pug 中使用 conditionals 来显示所需的模板。
注意:temp1
、temp2
... tempN
需要存在于您的 Templates
文件夹中
doctype html
html
body
p default content on all pages
if templateToLoad == "temp1"
include Templates/temp
else if templateToLoad == "temp2"
include Templates/temp2
发送模板名称。
app.get('/', function (req, res) {
res.render(indexFile, { templateToLoad: 'temp1' }); // include a template file
});
Pug 提出模板继承https://pugjs.org/language/inheritance.html
所以不是渲染 index.pug,而是渲染你的模板 :
index.pug :
doctype html
html
body
p default content on all pages
block content
temp.pug :
extends index.pug
block content
p My template
你的server.js
app.get('/', function (req, res) {
res.render('temp');
});