Крючок шаблона не запускается в пользовательской теме 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()}

Это должно принудительно отобразить содержимое этого блока, если оно правильно определено.

Другие вопросы по тегам