Шаблоны Jade, добавляя к голове после расширения шаблона

Я пытаюсь изучить jade/express, создав небольшое веб-приложение, которое использует canvas для отображения пользовательских данных.

В настоящее время я просто собираю шаблон Jade, я расширил предыдущий шаблон (один из которых я называю layout.jade), который включает общие ресурсы, которые используются почти на всех страницах.

Моя проблема в том, что я хочу расширить шаблон, а затем внести что-то в раздел главы только для этой страницы, а не для других. Я занимался этим некоторое время и изучал, но не могу найти на нем конкретной информации.

Вот что я

layout.jade
!!! 5
html
    head
        title EZgraph
        link(rel='stylesheet', href='bootstrap/css/bootstrap.min.css')
        link(rel='stylesheet', href='stylesheets/ezgraph.css')
    body
    block content
    block scripts

И вот шаблон, над которым я работаю

extends layout

head
    link(rel='stylesheet', href='stylesheets/barchartentry.css')

Можно ли сделать что-то подобное? Интуитивно мне кажется, что это должно быть, но я просто пропускаю механизм для этого.

Ответ 1

Я попадаю в эту тему на этой неделе в сериале серии screencast. Вот ссылка на него: http://www.learnallthenodes.com/episodes/10-more-advanced-jade.

Но, если вы хотите просто получить ответ, читайте дальше. Вы можете использовать более одного блока в файлах шаблонов. В вашем случае вы можете сделать layout.jade выглядеть примерно так:

layout.jade
!!! 5
html
    head
        title EZgraph
        link(rel='stylesheet', href='bootstrap/css/bootstrap.min.css')
        link(rel='stylesheet', href='stylesheets/ezgraph.css')
        block extraHeader
    body
        block content
        block scripts

И затем ваш файл шаблона:

extends layout

block extraHeader
    link(rel='stylesheet', href='stylesheets/barchartentry.css')

Обратите внимание на соответствующие вызовы блока extraHeader как в макете, так и в шаблоне. Это должно заставить вас идти.

Если вам нужно добавить контент в extraHeader из более чем одного файла шаблона в тот же рендеринг, вы можете использовать block append extraHeader или более сжатый append extraHeader. Также существует вариант prepend, если вы хотите, чтобы в начале появился дополнительный контент.

Изменить: исправлены некоторые отступы. Кроме того, я отступил от block content и block scripts, чтобы они были дочерними элементами body. И наконец, хотя block extraHeader будет присутствовать при каждом вызове вашего макета, если только ваш шаблон не дает ему контент, чтобы он туда попал, он не будет вводить ничего, что соответствует вашим требованиям, как я их понимаю.