簡體   English   中英

如何在nodejs中渲染doT.js模板?

[英]How to render doT.js templating in nodejs?

嗨,我想知道如何在dot.js模板引擎中渲染輸出。 我認為這是關於nodejs模板的一般性問題。(閱讀評論以獲取更多信息)。 我選擇這個模板引擎而不是jade或ejs的原因是因為它似乎是最快的引擎。

這是我的app.js:

var express = require('express'),
    app = express.createServer(),
    doT = require('doT'),
    pub = __dirname + '/public',
    view =  __dirname + '/views';

app.configure(function(){
    app.set('views', view);
    app.set('view options', {layout: false});
    app.set('view engine', 'dot');
    app.use(app.router);
});

app.register('.html', {
    compile: function(str, opts){
        return function(locals){
            return str;
        }
    }
});


app.get('/', function(req, res){

    //This is where I am trying to send data to the front end....
    res.render('index.html', { output: 'someStuff' });

});

這是我的HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<title>Index</title>
</head>
<body>

//This is where I am trying to receive data and output it...
{{=it.output}}

</body>
</html>

我就是找不到好的文檔。 這還不夠: http//olado.github.com/doT/ 如果可以的話請幫忙。 這將提高我對數據如何傳遞到nodejs中的視圖的指數式理解。 謝謝。

你需要讓表達知道使用doT作為模板引擎,如下所示:

app.set("view engine", "html");
app.register('.html', doT);

我的帖子是一個無恥的插件,但它可能會幫助某人。

我對Express 3.x現有模塊的使用方式不太滿意,我寫了一個名為dot-emc的文章:

https://github.com/nerdo/dot-emc

用法類似於上面發布的內容。 使用nom安裝它:

npm install dot-emc

然后將其設置為默認視圖引擎。 我更喜歡使用.def擴展名,因為我的文本編輯器將.dot文件識別為Graphviz文件,因此語法略有不同:

app.engine("def", require("dot-emc").__express);
app.set("view engine", "def");

然后,您可以像路徑中的任何其他視圖引擎一樣開始使用它,例如:

app.get("/", function(req, res) {
    res.render("index", {"title": "title goes here"});
});

如果你正在運行快遞3,它還不支持。 但是你可以使用express-dot:

npm install express-dot

然后在配置中

app.set('view engine', 'dot' );
app.engine('dot', require('express-dot').__express );

然后在路線:

res.render('profile', {}); // you will need to create views/profile.dot

我知道這是一個老問題,但我最近想用標准生成的Express 4.xx應用測試doT。 我沒有找到@olado的快速示例,以便與我生成的應用程序輕松匹配。 我嘗試了不同的插件(讓它工作,但不滿意),所以我最終編寫了這樣的模板引擎,以獲得支持包含(#)的預編譯點文件,而無需任何額外的插件:

var users = require('./routes/users');
// Standard app above this

var dot = require("dot").process({ 
  path: (__dirname + "/views")
});

var app = express();

// view engine setup
app.engine('dot', function(template, options, cb){
    // using .dot files
    var temp = path.parse(template).name;

    var cont = dot[temp](options);

    return cb(null, cont);


    // Or as one liner
    // return cb(null, dot[path.parse(template).name](options));

    // If you want to do error checking, return the error as callback functions first arg
    // return cb(new Error('Something went wrong');
});

app.set('views', path.join(__dirname, './views'));
app.set('view engine', 'dot');

// Standard generated app below this

現在我可以在這樣的路由中使用標准的“res.render”方式(對於index.js):

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

請記住在.dot模板文件中使用{{it.value}}。 在上面的基本示例中,index.dot看起來像這樣:

<!DOCTYPE html>
<html>
  <head>
    <title>{{=it.title}}</title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
  </head>
  <body>
    <h1>{{=it.title}}</h1>
    <p>Welcome to {{=it.title}}</p>
  </body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM