如何在页面中共享导航栏? appengine python Jinja2

时间:2017-07-21 13:47:32

标签: python jinja2

我正在敲打这个问题并找不到答案:我想在AppEngine Python Jinja2应用程序的页面中使用相同的导航栏。

我尝试了下面的技巧,但没有任何作用,任何想法?

1)试图通过autoescape获取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模板时,它不起作用。围绕它的Googlig似乎Jinja2与javascript不兼容

所以,我的应用程序中有超过10个页面,所有页面共享相同的导航栏。这意味着对于导航栏的任何更改,我必须编辑10个html文件,这是错误的确定方法。

那么,如何将导航栏的html代码包含在我的页面模板中?

提前致谢!

3 个答案:

答案 0 :(得分:2)

请尝试使用allert.java声明,即

RecyclerViewAdapter

答案 1 :(得分:2)

Jinja是一个强大的渲染引擎。您可以使用其template inheritance功能,而不是单独设计每个页面。

  

Jinja最强大的部分是模板继承。模板   继承允许您构建一个基础“骨架”模板   包含站点的所有常见元素并定义块   子模板可以覆盖。

因此,创建一个文件navbar.tpl,其中包含导航栏DOM的裸模板。然后,为应用程序本身创建一个基本模板,例如base.html。在此文件中,您可以正确放置{% include 'navbar.tpl' %}。并创建一些块,以便在应用程序的页面上放置内容。

现在,对于每个页面内容,您只需要{% extends 'base.html' %},然后覆盖您想要的特定内容块。

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

答案 2 :(得分:1)

是的,使用jinja include更清洁。这样你就可以编辑一次,它随处可见。

但是,你的方法不起作用的原因是jinja将标签显示为文本。要将它们打印为HTML,您需要执行以下操作:

{{ include_html|safe }}

相关问题