模版语法传值
{{}}:变量相关
基础数据类型能够传过去。
函数会自动加括号调用,不会传值
类会自动实例化,不会传值
django模版语法取值是固定的格式,只能采用‘句点符’
.索引 .键 两者可以混用
{% %}:逻辑相关
模版语法过滤器
过滤器就类似于一些模版语法内置方法
django有内置60多个过滤器,此处我们只介绍几个
基本语法{{数据|过滤器:参数}}
统计长度:
{{数据|length}}
默认值:
{{数据|default:‘默认值’}}
文件大小:
{{数据|filesizeformat}}
日期格式化:
{{数据|date:‘Y-m-d H:i:s’}}
切片操作:(支持步长)
{{数据|slice:‘索引+步长’}}
摘要(切取字符):
{{数据|truncatechars:摘要长度}}
切取单词:
{{数据|truncatewords:个数}}
移除特定字符:
{{数据|cut:‘’}}
拼接:
{{数据|join:‘’}}
拼接(支持加法):
{{数据|Add:‘’}}
取消转义:
{{数据|safe}}
模版语法之标签
for循环
{% for foo in l %}
{{ forloop }}
{% endfor %}
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
索引 计数 倒序计数 倒序索引 是否是第一次循环
if判断
{% if t %}
{% else %} els需要手动补全
{% endif %}
for和if混合使用
{% for foo in l %}
{% if forloop.first %}
<p>第一次</p>
{% elif forloop.last %}
{% else %}
<p>{{ foo }}</p>
{% endif %}
{% empty %}
<p>for循环的可迭代对象内没有元素无法循环</p>
{% endfor %}
with取别名
{% with 复杂获取数据句式 as 别名 %}
{% endwith %}
自定义标签过滤器、标签、inclusion_tag
必须先操作的三个步骤
1.在应用下创建一个名称为:templatetags 文件夹(名字必须为该名字)
2.templatetags下创建一个名字为任意的py文件
3.在py文件内书写
from django import template
register = template.Library()
# 自定义过滤器
@register.filter(name='sum')
def mysum(v1, v2):
return v1 + v2
<h1>自定义过滤器使用</h1>
{% load mytags %}
{{ q|sum:q1
#自定义标签
@register.simple_tag(name='bg')
def bgm(a,b,c,d):
return a+b+c+d
<h1>自定义标签使用</h1>
{% load mytags %}
{% bg a b c d %}
# 自定义inclusion_tag
@register.inclusion_tag(name='inc')
def incl_tag(n):
data = ['第{}项'.format(i) for i in range(n)]
return locals()
<h1>自定义inclusion_tag使用</h1>
{% load mytags %}
{% inc 10 %}
模版的继承
{% extends 'home.html' %}
继承home页面模版
声明哪块代码可以被修改
{% block content %}
模版内能被修改的代码块
{% endblock %}
使用:
{% block content %}
被修改后的代码块
{% endblock %}
注意:该修改是在继承页面进行修改,不在被继承的模板页面进行修改
一般情况下,模版下的js、css、html三块都能修改,实现同一个页面,不同的效果
划分的区域越多,模版的拓展性越强
模版的导入
{% include ‘home.html’ %}