Flask模板继承支持级联继承吗?孙模板table块无法渲染求助
Flask模板级联继承问题解答
Flask使用的Jinja2模板引擎完全支持级联继承,你的问题出在table块没有被纳入上层模板的渲染流程中,具体原因和解决方法如下:
问题根源
Jinja2的模板块只有在继承链的上层模板(最终到根模板base.html)的渲染结构中存在对应的输出位置时,才会被渲染到页面。你的代码里:
base.html仅定义并渲染了content块,没有任何地方引用table块content.html虽然定义了table块,但这个块是独立于content块之外的,没有被包含在base.html会渲染的区域里- 孙模板重写的
table块自然也不会被输出到最终页面
修复方案
有两种可行的修改方式:
方案1:在根模板base.html中添加table块的渲染位置
修改base.html,在合适的位置(比如content块之后)加入table块:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{ project_info.project.name }}</title> </head> <body> <main class="container"> {% include 'header.html' %} {% block content %}{% endblock %} <!-- 添加table块的渲染位置 --> {% block table %}{% endblock %} </main> </body> </html>
方案2:在content.html的content块内部包含table块
如果table块属于content区域的一部分,直接把table块放到content块内部:
{% extends 'base.html' %} {% block content %} <section> <div id="navi" class="grid"> <div>Foo </div> <div>Bar</div> </div> </section> <!-- 将table块嵌套在content块内部 --> {% block table %}{% endblock %} {% endblock %}
两种方案都能让孙模板的table块内容正常渲染,根据你的页面结构选择合适的方式即可。
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

