day3-Django的Template
目录
1.Template对象
2.Context 对象
3.模板配置
4.视图渲染
5.模板系统语法
1)变量
2)标签
3)过滤器
6.静态文件夹路径配置
1.Template对象
该对象定义在 django/template/base.py文件中,传入的一个必填参数为一个字符串,渲染的过程就是对字符串内的参数进行替换,实例化:
Template("this is {{project}}")
2.Context 对象
定义于 django/template/context.py ,传入的一个必填参数是一个字典对象,实例化:
Context({'project':'Django BBS'})
可以调用 Template对象的 .render方法传入Context对象进行渲染,可以使用 Context类的子类
RequestContext自定义上下文处理器,然后再setting.py文件中的TEMPLATES中修改comtext_processors 。
3.模板配置
默认是支持DTL和Jinja2模板引擎,可以在settings.py 文件中配置TEMPLATES列表
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},}, ]
BACKEND: 指定模板引擎的python路径
DIRS: 指定项目的模板文件存放路径,例如根目录的templates文件夹指定为模板路径:
'DIRS': [os.path.join(BASE_DIR, 'templates')]
APP_DIRS: 是否开启子应用的查找目录,
OPTIONS:额外的选项,context_processors配置上下文处理器,也就是一个个字典对象,模板默认渲染的上下文。
4.视图渲染
def index(request):project='Django BBS'return render(request, 'index.html', {'project':project})
5.模板系统语法
1)变量
变量用{{ }}包裹
- 字典查询:{{a.b}}查询 a['b']
- 属性查询:{{a.b}}查询 a.b
- 方法调用: {{a.b}}调用a.b()
- 数字索引查询: {{ a.1}}查询a[1]
2)标签
内置标签用{% %}包裹,用于在输出时创建文本、控制循环和判断逻辑以及装载外部信息。
条件:{% if xxx%}{% elif xxx%}{% else%} {%endif%}
循环:{% for xxx in list %} {% empty %} {% endfor %} empty可选子句在列表为空时执行。
通过forloop变量获取迭代中的信息:
counter:从 1开始计数
counter0: 从0开始计数
revcounter:表示当前循环中剩余元素的数量,最后一次返回是1
revcounter0:表示当前循环中剩余元素的数量,最后一次返回是0
first:返回一个布尔值,标识是否为第一个元素,True表示第一个其他为False
last: 标识是否为最后一个元素
parentloop:引用父级循环的forloop变量
url标签:{% url ns:name arg1,arg2 %}
其中,ns是视图的命名空间,name是视图的名称,如果是动态url,则需要填arg的值
多行注释:{% comment %} {% endcomment%}
判断变量是否相等: {% ifequal v1 v2 %}{% else %} {% endifequal%} ifnotequal 判断不相等,用法一样。
加载静态文件: {% load static%} 然后加载静态资源就可以以如下形式: <img src="{% static 'image/xxx.png'%}"/>
3)过滤器
用于在显示变量之前对变量的值进行调整,他们在模板中很常见,使用管道符|指定。
获取首个或末尾的元素 | |first |last |
截取指定个数的词 | :truncatewords|n 多出来的词用省略号替换 |
日期格式化: | |date:"Y-m-d H:i:s" |
首字母大写 | |capfirst |
切分 | |join:'xx' 类似python中的 xx.join(value) |
字符串html安全显示: | |safe |
字符串中的链接可点击 : | |urlize |
保留小数点: | |floatformat:n 保留n位 |
自定义过滤器:
1.在app的目录下创建一个templatestags包
2.在这个包里面创建一个python文件 filter.py
3.定义过滤器
from django import templateregister = template.Library()@register.filter
def test_filter(value,args):return value+args
4.前端使用
{% load filter %}
{{ data|test_filter:3 }}
6.静态文件夹路径配置
在项目的根目录中创建static文件夹,并且在settting文件夹中添加如下代码:
STATICFILES_DIRS=(os.path.join(BASE_DIR,'static'),)