Rey*_*Rey 24 css python django django-templates jinja2
我通过交易做html/css,我一直在和django项目一起作为模板设计师.我目前正在使用Jinja2的网站,我已经使用了大约2周.我刚刚通过阅读文档发现Jinja2不支持多级模板继承,因为你不能做多于一个
{% extends "foo" %}
Run Code Online (Sandbox Code Playgroud)
每次渲染.现在我很确定你可以在Django中做到这一点,它很强大,因为你可以指定一个基本模板,根据它指定3或4个模板,然后使用这些基础模板构建页面的内容.是不是继承点,所以你有更多的权力抽象,所以你唯一真正搞乱独特的代码?
无论如何我不知道该怎么做.我不知道是否有某些方法可以使用Django模板.我不是Django或Jinja(2)的专家,但我可以提供所需的任何信息.
Rey*_*Rey 29
文档措辞的方式,似乎它不支持继承(n)级别.
与Python不同,Jinja不支持多重继承.因此,每次渲染只能调用一个扩展标记.
我不知道这只是一个规则说1扩展每个模板....我现在知道,在jinja irc频道的帮助下.
小智 24
使用jinja2实现多级模板化的最佳方法之一是使用'include',假设您有' base_layout.html '作为基本模板
<!DOCTYPE html>
<title>Base Layout</title>
<div>
<h1>Base</h1>
.... // write your code here
{% block body %}{% endblock %}
</div>
Run Code Online (Sandbox Code Playgroud)
然后你想要' child_layout.html '扩展'base_layout.
{% include "base_layout.html" %}
<div>
... // write your code here
</div>
{% block body %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
现在你的页面可以扩展' child_layout.html ',它将同时包含base_layout.html和child_layout.html
{% extends "child_layout.html" %}
{% block body %}
...// write your code here
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
Dam*_*ien 12
经过很长时间的努力,我发现{{super}}jinja2模板中有多个继承级别。
以下内容的灵感来自/sf/answers/2176568131/。
base.html
<html>
<body>
{% block title %}
Brand
{% endblock %}
</body>
Run Code Online (Sandbox Code Playgroud)
layer-1.html
{% extends "base.html" %}
{% block title %}
{{ super() }} - Section
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
layer-2.html
{% extends "layer-1.html" %}
{% block title %}
{{ super() }} - Article
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
渲染模板将在 block 中layer-2.html输出。Brand - Section - Articletitle
试试这个,感谢@Ixm的回答,这对我来说是一项工作。
base.html
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
{% block content %}{% endblock %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
content.html
{% extends "base.html" %}
{% block content %}
<table>
<tr>
{% include "footer.html" %}
</tr>
</table>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
footer.html
{% block footer %} <td> test</td>{% endblock %}
Run Code Online (Sandbox Code Playgroud)
然后打电话给
env = Environment(loader=FileSystemLoader(os.path.join(path, "Layouts")))
template = env.get_template('content.html')
html = template.render()
print html
Run Code Online (Sandbox Code Playgroud)