自定义 Nikola 主题中未触发模板挂钩

问题描述 投票:0回答:1

我正在尝试为 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
块在同一模板文件中不起作用?

python mako nikola
1个回答
0
投票

如果您遇到覆盖的

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()} 

如果定义正确的话,应该强制渲染该块的内容。

© www.soinside.com 2019 - 2024. All rights reserved.