我想在构建Django模板级别时获得一些建议。
阅读文档,我不了解如何创建具有两个以上级别的模板层次结构。
例如,我想创建3个继承级别:
base.html
└── base_level2.html
├── level2_level3_1.html
└── level2_level3_2.html
这是我的代码:
First level
{% block level2 %}{% endblock %}
{% extends "base.html" %}
{% block level2 %}
Second level
{% block level3_1 %}{% endblock %}
{% block level3_2 %}{% endblock %}
{% endblock %}
{% extends "base_level2.html" %}
{% block level3_1 %}
Third level, part 1
{% endblock %}
{% extends "base_level2.html" %}
{% block level3_2 %}
Third level, part 2
{% endblock %}
def myView(request):
return render_to_response('level2_level3_1.html', {}, context_instance=RequestContext(request))
这样,我可以在浏览器中看到以下内容:
First level
Second level
Third level, part 1
这对我来说是合乎逻辑的,因为我仅在level2_level3_1.html上调用
render_to response
。当然,如果调用level2_level3_2.html,我会收到消息
Third level, part 2
,而不是Third level, part1
。怎么解决呢?那是一个好方法吗?我以这种方式结构化了东西,因为我的真实模板很大,代码行很多,所以我想保持一些顺序。
任何建议将被认真考虑。
最佳答案
在不了解模板的特定功能的情况下很难说这是一个好主意还是不好的主意,但是我的直接 react 是您正在尝试过度组织模板。我认为大多数人会敦促您不要使用三层系统,因为它会使在网站上进行小的更改变得更加困难,并且更难以跟踪事物的位置。从Python的Zen中:
Flat is Better than Nested
对于Two Scoops of Django中的3层系统的建议如下:
- Each app has a
base_<app_name>.html
template. App-level base templates share a common parent, base.html.- Templates within apps share a common parent base_
<app_name>
.html template.- Any template at the same level as base.html inherits 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
编辑:并没有真正的原因:
Second level
{% block level3_1 %}{% endblock %}
{% block level3_2 %}{% endblock %}
其中每个块指的是一个模板的内容。您可以将其简化为一个
{% block level3 %}{% endblock level3%}
然后在每个level3模板中,相应地重命名块
关于Django模板继承: how many levels and what page to render,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16899917/