2012-06-27 10 views
8

Tengo 3 archivos: layoutA.jade, layoutB.jade e index.jade. ¿Cómo puedo establecer programáticamente qué diseño se extenderá index.jade?¿Cómo establece dinámicamente un diseño para que una plantilla de Jade se extienda en Node.js/Express 3.0?

He intentado usar:

app.set('view options', { layout: false }); 

con:

res.render('index', { title: 'Express', layout: 'layoutB' }); // older 2.x way? 

Me parece que no puede anular nada establecido explícitamente en el archivo index.jade. Omitir la línea extends dentro del archivo index.jade tampoco funcionó.

Respuesta

6

digamos que los archivos de jade están en el directorio siguiente:

+ views 
    + shared 
    - layoutA.jade 
    - layoutB.jade 
    + home 
    - index.jade 

Agregar la configuración de diseño en el orden correcto, y especifique la carpeta vistas raíz:

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.set('view options', { layout: 'shared/layoutA' }); 

Asegúrese de especificar el carpeta correcta (en este caso 'vistas'). También asegúrese de especificar un diseño predeterminado válido. Verifique que esto funcione con una página de prueba antes de sumergirse más profundamente.

Una vez que está trabajando puede el diseño predeterminado de esta manera:

if(someImportantVar) { 
    res.render('home/index', { title: 'Different layout!', layout: 'shared/layoutB' }); 
} else { 
    res.render('home/index', { title: 'Default layout!'}); 
} 
+0

Corrígeme si me equivoco, pero esta solución no está bien ya, ¿verdad? –

+0

@AugustinRiedinger Según el título de la pregunta, debería ser correcto para Express 3.0. ¿No funciona dentro de esa versión? – JimmyBoh

+0

No creo que haya problemas de compatibilidad con respecto a 'express 3' frente a' express 4.x' actual, pero en el lado de jade: Usando 'pug 2.0', puedo decir que el parámetro' view options' no se usa más (o estaría feliz de estar equivocado). He estado a través de muchas búsquedas para lograr un diseño dinámico en jade/pug sin éxito, por lo que esta respuesta ha sido frustrante para mí, a pesar de no estar equivocado. –

Cuestiones relacionadas