Skip to main content
 首页 » 编程设计

python之如何在我的页面之间共享导航栏应用引擎 python Jinja2

2025年05月04日22lexus

我正在为这个问题苦思冥想,却找不到答案:我想在我的 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 。

浏览链接的文档以获得更好的示例。