html的数据是静态的,动态内容由框架标签负责引进。Django在html页面嵌入标签,是以{% 代码块 %}的形式,而输出内容使用{{ 变量名称 }}。接下来,请看标签释义。
12.1 标签释义
模板标签的本质是函数,标签名一般即为函数名,分工的意义就不用多了说了,主要作用是载入代码渲染模板或对传递过来的参数进行一定的逻辑判断或计算后返回。
在Web框架中,标签常分为内置标签和自定义标签,在内置标签不够用的时候,才会去自定义标签(说了句废话)。Django的内置标签不是很多,好好熟悉一番。
常用内置标签一览表
12.2 自定义标签
如果框架内置的标签不够用,可以进行自定义,其步骤如下:
1. 新建templatetags包
在应用base下,新建templatetags包(内有__init__.py的文件夹),跟templates和static同级。
2. 新建标签文件
在templatetags下,新建一个mytag.py文件,我用返回当前日期打个样子,你可自行发挥,任意编一编。
from datetime import datetime
from django import template
register = template.Library()
@register.simple_tag
def current_time():
return datetime.now()
3. 在模板中的应用
在模板中,通过{% load mytags %}进行引入。温馨提醒:只有应用(base)在settting.py中INSTALLED_APPS进行登记的,自定义标签才能起作用。
岗位信息列表{% load mytag %}当前日期:{% current_time %}
{% for post in posts %}岗位:{{ post.name }}删除|修改
{% endfor %}
标签注册装饰器,除了简单声明外,还可以带参数,通过添加name参数,可以为标签举个另外的名字(默认是函数名),@register.simple_tag(name='current')。
还可以通过设置takes_context=True,获取上下文中的内容,如获取从views.py传过来的数据context['posts']。
另外,可通过 @register.inclusion_tag('index.html')获取其他模板文件内容。这种标签,称为包含包含标签。
Django框架中,除了标签之外,还有过滤器。有关过滤器的使用,请见下一节内容。