Крючок шаблона не запускается в пользовательской теме Nikola
Я пытаюсь написать собственную тему для Николы, генератора статических сайтов. Я в основном следовал их руководству , но столкнулся с проблемой. Я хочу показывать определенный HTML-код конкретно на страницах (а не в сообщениях) в том месте, где появляется крючок шаблона. Итак, я сначала запустил эту команду:
nikola theme -c page.tmpl
При этом файл page.tmpl базовой темы копируется в каталог моей пользовательской темы. Этот файл на самом деле имеет длину всего 1 строку, просто это:
<%inherit file="story.tmpl"/>
Поэтому я добавил определение для<%block name="page_header"> ... </%block>
. Однако код, который я определил внутри этого блока, не отображается на моих страницах. Чтобы убедиться, что я не схожу с ума, я также определил<%block name="extra_head"> ... </%block>
в том же файле page.tmpl, и в этом случае содержащийся в нем код действительно появился.
Почему переопределенныйextra_head
блокировать работу, пока переопределеноpage_header
блок не работает в одном файле шаблона?
1 ответ
Если у вас возникла проблема, когда переопределенный блок не отображается, ноextra_head
блок есть, то возможно, что хук не используется или не срабатывает в родительском шаблоне (), который наследуется от.
Видетьzzzeek/mako
/
doc/build/inheritance.rst
Используя наследование шаблонов, два или более шаблонов могут организоваться в цепочку наследования , в которой содержимое и функции всех задействованных шаблонов могут смешиваться.
Общая парадигма наследования шаблонов такова:если шаблон наследует от template , то шаблон соглашается отправить управление выполнением шаблону во время выполнения (это называется наследующим шаблоном).
ШаблонB
, унаследованный шаблон, затем принимает решение о том, какие ресурсы изA
должно быть исполнено.
Чтобы проверить это, убедитесь, что этот или любой другой шаблон, от которого он может унаследовать, действительно использует этот блок. Если его там нет, то его переопределение не будет иметь никакого эффекта.
Иногда может существовать несколько уровней наследования шаблонов. Убедитесь, что между иstory.tmpl
это может мешать работе блоков.
В качестве теста попробуйте явно вызватьpage_header
блокировать внутриpage.tmpl
вне определения блока, например:
mako ${self.page_header()}
Это должно принудительно отобразить содержимое этого блока, если оно правильно определено.