2011-03-23 27 views
43

Estoy tratando de utilizar Embedded procesador Javascript para el nodo: https://github.com/visionmedia/ejsNode.js - EJS - incluyendo un parcial de

me gustaría saber cómo puedo incluir otro archivo de vista (parcial) dentro de un archivo de vista .ejs .

+3

El sistema parcial es en realidad una parte de ExpressJS, me creer. ¿Estás usando el marco Express? – Zikes

+0

No, no lo estoy usando ... Probablemente tenga que seguir ese camino si no es posible con solo un motor de plantillas. – jeffreyveon

Respuesta

91

Con Express 3.0:

<%- include myview.ejs %> 

la ruta es relativa a la persona que llama, que incluye el archivo, no desde el directorio de vistas de conjunto con app.set("views", "path/to/views").

EJS includes

+1

esta debería ser la respuesta correcta ya que el desarrollador de ejs/express actualizó el código. – Joshua

+1

fijo, thx, paaading –

-3

EJS por sí mismo actualmente no permite ver parciales. Express lo hace.

+4

Información obsoleta. La nueva versión lo admite según el comentario de @pkyeck – Joshua

+1

EJS permite parciales. – mythicalcoder

3

expreso 3.x ya no admite parcial. De acuerdo con la publicación ejs 'partial is not defined', puede usar la palabra clave "incluir" en EJS para reemplazar la funcionalidad parcial eliminada.

+1

Consulte ejs-locals para obtener ayuda de expresss 3. – UpTheCreek

10

En Expreso 4.x he utilizado la siguiente para cargar ejs:

var path = require('path'); 

    // Set the default templating engine to ejs 
    app.set('view engine', 'ejs'); 
    app.set('views', path.join(__dirname, 'views')); 

    // The views/index.ejs exists in the app directory 
    app.get('/hello', function (req, res) { 
    res.render('index', {title: 'title'}); 
    }); 

continuación, sólo tiene dos archivos para que funcione - views/index.ejs:

<%- include partials/navigation.ejs %> 

y de la views/partials/navigation.ejs:

<ul><li class="active">...</li>...</ul> 

También puede decirle Express para utilizar ejs para las plantillas HTML:

var path = require('path'); 
var EJS = require('ejs'); 

app.engine('html', EJS.renderFile); 

// Set the default templating engine to ejs 
app.set('view engine', 'ejs'); 
app.set('views', path.join(__dirname, 'views')); 

// The views/index.html exists in the app directory 
app.get('/hello', function (req, res) { 
    res.render('index.html', {title: 'title'}); 
}); 

Por último, también se puede utilizar el módulo ejs diseño:

var EJSLayout = require('express-ejs-layouts'); 
app.use(EJSLayout); 

Esto utilizará el views/layout.ejs como su diseño .

4

A partir del expreso 4.x

app.js

// above is all your node requires 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); <-- ./views has all your .ejs files 
app.set('view engine', 'ejs'); 

error.ejs

<!-- because ejs knows your root directory for views, you can navigate to the ./base directory and select the header.ejs file and include it --> 

<% include ./base/header %> 
<h1> Other mark up here </h1> 
<% include ./base/footer %> 
Cuestiones relacionadas