我正在尝试为 Nikola(一个静态站点生成器)编写一个自定义主题。我主要遵循他们的教程,但遇到了问题。我想在页面上(而不是帖子上)在
page_header
模板挂钩出现的位置专门显示某些 HTML。所以我首先运行这个命令:
nikola theme -c page.tmpl
这会将基本主题的 page.tmpl 文件复制到我的自定义主题的目录中。该文件实际上只有 1 行长,简单来说就是:
<%inherit file="story.tmpl"/>
所以我添加了
<%block name="page_header"> ... </%block>
的定义。但是,我在该块中定义的代码不会显示在我的页面上。为了确保我不会发疯,我还在同一个 page.tmpl 文件中定义了 <%block name="extra_head"> ... </%block>
,在这种情况下,其中包含的代码 did 显示出来。
为什么覆盖的
extra_head
块可以工作,而覆盖的 page_header
块在同一模板文件中不起作用?
如果您遇到覆盖的
page_header
块未显示但 extra_head
块显示的问题,则可能是 page_header
钩子未在父模板中使用或触发 (story.tmpl
) page.tmpl
继承自。
zzzeek/mako
/ doc/build/inheritance.rst
使用模板继承,两个或多个模板可以将自己组织成一个继承链,其中所有涉及模板的内容和功能可以混合。
模板继承的一般范式是这样的:如果模板
继承自模板A
,则模板B
同意在运行时将执行控制发送给模板A
(B
称为继承模板)。A
模板,继承 模板,然后决定应执行B
中的哪些资源。A
要检查这一点,请确保
story.tmpl
或它可能继承的任何其他模板实际上使用 page_header
块。如果那里不存在,那么在 page.tmpl
中覆盖它不会有任何效果。
有时,可能存在多层模板继承。请确保
page.tmpl
和 story.tmpl
之间没有可能干扰块的中间模板。
作为测试,尝试在块定义之外的
page_header
内显式调用 page.tmpl
块,例如:
mako ${self.page_header()}
如果定义正确的话,应该强制渲染该块的内容。