Jinja2中的多级模板继承?

新手上路,请多包涵

我做 html/css 的贸易,我一直在从事和关闭 django 项目作为模板设计师。我目前正在一个使用 Jinja2 的网站上工作,我已经使用了大约 2 周。我刚刚通过阅读文档发现 Jinja2 不支持多级模板继承,因为你不能做多个

{% extends "foo" %}

每个渲染。现在我很确定你可以在 Django 中做到这一点,它很强大,因为你可以指定一个基本模板,在此基础上指定 3 或 4 个模板,然后使用这些基本模板构建你的页面。继承的重点不是让你有更多的抽象能力,所以你唯一真正弄乱了独特的代码吗?

无论如何,我不知道在这里做什么。我不知道是否有某种方法可以像使用 Django 模板一样工作。我不是 Django 或 Jinja(2) 方面的专家,但我可以提供任何需要的信息。

原文由 Rey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 827
2 个回答

文档的措辞方式似乎不支持深度继承(n)级别。

不像 Python Jinja 不支持多重继承。因此,每次渲染只能调用一个扩展标签。

我不知道这只是一个规则说每个模板扩展 1…. 我现在知道了,在 jinja irc 频道的帮助下。

原文由 Rey 发布,翻译遵循 CC BY-SA 2.5 许可协议

多重继承和多级继承是不一样的。我知道这个问题与后者有关。

让我展示我的解决方法:

父模板.html

 <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset='utf-8'>
    <meta name='viewport' content='width=device-width, initial-scale=1'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge'>
    <title>Your Title</title>
    <link rel='stylesheet' href="{{ url_for('static', filename='css/main.css') }}">
    {% block head %}{% endblock %}
</head>

<body>
    {% block nav %}{% endblock %}
    {% block body %}{% endblock %}
</body>

</html>

子模板.html

 {% extends 'parent-template.html' %}

{% block nav %}
<header>
    <div>
        <nav>
            ...
            [navbar html code]
            ...
        </nav>
    </div>
</header>
{% endblock %}

login.html(我不需要导航栏)

 {% extends 'parent-template.html' %}

{% block body %}
<header>
    ...
    [header html code]
    ...
</header>
<main>
    ...
    [main html code]
    ...
</main>
{% endblock %}

home.html(我需要导航栏的地方)

 {% extends 'child-template.html' %}

{% block body %}
<main>
    ...
    [main html code]
    ...
</main>
{% endblock %}

login.html 和 home.html 都使用父模板中的所有数据,但只有 home.html 使用子模板(导航栏)中的数据。

原文由 S.Dave 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题