我正在为这个问题苦思冥想,却找不到答案:我想在我的 AppEngine Python Jinja2 应用程序的页面中使用相同的导航栏。
我尝试了以下技巧但没有任何效果,有什么想法吗?
1) 试图通过自动转义获取 html:
在 Python 中:
include_html = "<h1> Try to insert HTML stuff </h1>"
...
main_template_values = {
'include_html': include_html,
}
html 模板如下所示:
...
{{include_html}}
然后在浏览器中显示的实际页面如下所示:
<h1> Try to insert HTML stuff </h1>
因此,我得到的不是大粗体文本,而是带有可见标签的普通文本。由于某些原因,HTML 标签没有以这种方式处理。
2) 尝试过 Javascript
我按照 w3 学校的示例创建了一个 html 页面:
<!DOCTYPE html>
<html>
<title>W3.JS</title>
<script src="https://www.w3schools.com/lib/w3.js"></script>
<body>
<h1> Testing w3-include:</h1>
<div w3-include-html="included_file.html"></div>
<script>
w3.includeHTML();
</script>
</body>
</html>
然后 include_html.html 文件看起来像:
<h1> Try to insert HTML stuff </h1>
如果我直接在我的浏览器中打开 HTML 页面就可以工作。但是,当我将此页面用作 Jinja2 模板时,它不起作用。谷歌搜索似乎 Jinja2 与 javascript 不兼容
所以,我的应用程序中有 10 多个页面,所有页面都共享同一个导航栏。这意味着对于导航栏的任何更改,我都必须编辑 10 个 html 文件,这肯定会导致错误。
那么,如何将导航栏的 html 代码包含到我的页面模板中呢?
提前致谢!
请您参考如下方法:
Jinja 是一个强大的渲染引擎。您可以利用它的 template inheritance,而不是单独设计每个页面。功能。
The most powerful part of Jinja is template inheritance. Template inheritance allows you to build a base “skeleton” template that contains all the common elements of your site and defines blocks that child templates can override.
因此,创建一个文件 navbar.tpl,其中包含导航栏 DOM 的裸模板。然后,为应用程序本身创建一个基本模板,类似于 base.html。在此文件中,您将正确放置 {% include 'navbar.tpl' %}。并创建一些 block ,用于在应用程序的页面上放置内容。
现在,对于每个页面内容,您只需{% extends 'base.html' %} 然后覆盖您想要的特定内容 block 。
浏览链接的文档以获得更好的示例。
