模板的继承
当前端一个页面中的某一块内容,是不断变换的 ,但是别的块不变,就可以使用模板的继承。
基本语法:
# 主页面(父页面)
{% block 模板名称 %}
什么都不需要写,具体内容由子页面决定
{% endblock %}
# 继承页面(子页面)
{% block 模板名称 %}
...代码块
{% endblock %}
# 注意,这里的模块名称,要一致,在父页面中声明的模块名,子页面要一致
自定义标签(inclusion_tag)
在Django框架中,在同一个项目里,多个前端页面,需要使用相同的模块内容,并且需要相同的参数,可以使用自定义标签inclusion_tag,
主要用来解决,每个html页面中,都需要重写一遍相同局部模块内容的问题
步骤:
1 在应用下创建一个名字必须叫templatetags文件夹
2 在该文件夹内创建一个任意名称的py文件
3 在该py文件内先固定写两行代码
from django import template
from 应用名 import models
register = template.Library()
(在这个文件夹中,可以自定义过滤器,自定义标签,自定义inclusion_tag)
1 创建好文件夹,和py文件 ,并写入内容
from django import template
from 应用名 import models
register = template.Library()
# 自定义inlcusion_tag
@register.inclusion_tag('对应局部块的名称(left_menu).html')
def left_menu(username): # username 由调用的地方传递过来的参数(文章下面的内容有写)
需要用到的的参数,和需要的操作。
。。代码块
return locals()
2 将多个页面都需要使用的局部代码块,单独放在一个html文件中、
<div>
多个页面都需要使用的局部模块信息(例如,导航栏,侧边栏)
</div>
<div>
多个页面都需要使用的局部模块信息(例如,导航栏,侧边栏)
</div>
<div>
多个页面都需要使用的局部模块信息(例如,导航栏,侧边栏)
</div>
# 直接只写代码块就行了,别的不需要
3 在需要inclusion_tag的地方直接调用就好了。
{% load mytag %} # 声明要调用的方法。 mytag(在templatetags中创建的任意py文件)
{% left_menu username %} # 声明要使用的代码块(left_menu),传入它需要的参数username
内部原理:
先定义一个方法
在页面上调用该方法 并且可以传值
该方法会生成一些数据,然后传递给html页面
之后将渲染好的结果放到调用的位置