Django模板继承:要渲染多少级别和页面

can*_*eta 9 django inheritance django-templates

我想在构建django模板级别时有一些建议.

阅读文档,我不明白如何创建超过2个级别的模板层次结构.

例如,我想创建3个级别的继承:

base.html
    ??? base_level2.html
            ??? level2_level3_1.html
            ??? level2_level3_2.html
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

通过这种方式,我可以在浏览器上看到以下内容:

First level
Second level
Third level, part 1
Run Code Online (Sandbox Code Playgroud)

这对我来说是合乎逻辑的,因为我render_to response只打电话给level2_level3_1.html.

当然,如果调用level2_level3_2.html,我得到的消息Third level, part 2却没有Third level, part1.

怎么解决这个?这是一个好方法吗?我用这种方式构建了东西,因为我的真实模板很大,代码很多,所以我想保留一些顺序.任何建议将被认真考虑.

skz*_*yzg 7

如果不了解模板的具体功能,很难说这是好主意还是坏主意,但我的反应是你试图过度整理你的模板.我认为大多数人会敦促你远离3层以上的系统,因为它使得在网站上进行小的更改变得更加困难,并且更难以跟踪事物的位置.来自Python的禅宗:

Flat比嵌套好

Django的两个Scoops中的3层系统的建议如下:

  1. 每个应用都有一个base_<app_name>.html模板.应用级基本模板共享一个公共父级base.html.
  2. 应用内的模板共享一个共同的父base_ <app_name>.html模板.
  3. 与base.html处于同一级别的任何模板都会继承base.html

对于您的命名架构,它可能如下所示:

  | Templates/
  |--base.html
  |--someothertemplate.html # extends base.html
  |--level2/
  |----base_level2.html     # extends base.html
  |----level2_1.html        # extends base_level2.html
  |----level2_2.html        # extends base_level3.html
Run Code Online (Sandbox Code Playgroud)

编辑:并没有真正的理由:

    Second level
   {% block level3_1 %}{% endblock %}
   {% block level3_2 %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

其中每个块指的是一个模板的内容.你可以将它简化为一个块

{% block level3 %}{% endblock level3%}
Run Code Online (Sandbox Code Playgroud)

然后在每个level3模板中,相应地重命名块