模板结构优化

发布于 2020-02-18 21:20:22   阅读量 138  点赞 0  

一、引入模板

可以使用include标签来引入其他模板。

  1. 指定形式:
     模板名可以使用变量指定,或使用硬编码的字符串。

  2. 模板路径:
     使用include标签包含其他模板时,其搜索路径与render()函数相同,即先搜索当前 app 下的templates文件夹,若没有,则再搜索其他 app 下的模板文件夹。

  3. 上下文问题:
     对于引入的模板,使用当前模板的上下文对其进行渲染。如:

/* 当前模板的上下文为person="John",msg="hello" */
{% include "greet.html" %}

/* greet.html内容如下 */
{{msg}},{{ person|default:"friend" }}!

/* 最终在原模版中渲染的效果 */
 hello,john!

 也可以使用with指定传递给被包含模板的变量。

{% include "greet.html" with person="john" msg="hello" %}


二、模板继承

模板继承允许我们先及案例一个基本的模板框架,再在定义定义能被子模板覆盖的内容。

  1. 父模板:
     在父模板中使用{% block block_name %}{% endblock %}定义一个块,该块可以被子模板指定覆盖。在父模板的{% block %}{% endblock %}标签中可以有内容,作为子模版没有指定填充该块时的备用内容。

  2. 子模板:
     子模板中首先需要在第一行使用{% extends base_template %}来声明继承的父模板,该标签的搜索路径同render()函数。然后使用{% block block_name %}{% endblock %}来填充父模板中指定的块。

子模板的{% extend %}标签必须位于模板文件的第一行。

子模板中无需填充所有父模板中声明的块。

子模板的块中,可以使用{{ block.super }}变量获取父模板中的内容,可以使用这个变量追加父模板中的内容。

为了更好的可读性,也可以为{% endblock %}标签指定对于的名字:

{% block content %}
...
{% endblock content %}


Last Modified : 2020-09-22 22:03:50