模版语法传值

  1. {{}}:变量相关
  2. 基础数据类型能够传过去。
  3. 函数会自动加括号调用,不会传值
  4. 类会自动实例化,不会传值
  5. django模版语法取值是固定的格式,只能采用‘句点符’
  6. .索引 .键 两者可以混用
  7. {% %}:逻辑相关

模版语法过滤器

过滤器就类似于一些模版语法内置方法
django有内置60多个过滤器,此处我们只介绍几个

基本语法{{数据|过滤器:参数}}

统计长度:
{{数据|length}}
默认值:
{{数据|default:‘默认值’}}
文件大小:
{{数据|filesizeformat}}
日期格式化:
{{数据|date:‘Y-m-d H:i:s’}}
切片操作:(支持步长)
{{数据|slice:‘索引+步长’}}
摘要(切取字符):
{{数据|truncatechars:摘要长度}}
切取单词:
{{数据|truncatewords:个数}}
移除特定字符:
{{数据|cut:‘’}}
拼接:
{{数据|join:‘’}}
拼接(支持加法):
{{数据|Add:‘’}}
取消转义:
{{数据|safe}}

模版语法之标签

  1. for循环
  2. {% for foo in l %}
  3. {{ forloop }}
  4. {% endfor %}
  5. {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
  6. 索引 计数 倒序计数 倒序索引 是否是第一次循环
  7. if判断
  8. {% if t %}
  9. {% else %} els需要手动补全
  10. {% endif %}
  11. forif混合使用
  12. {% for foo in l %}
  13. {% if forloop.first %}
  14. <p>第一次</p>
  15. {% elif forloop.last %}
  16. {% else %}
  17. <p>{{ foo }}</p>
  18. {% endif %}
  19. {% empty %}
  20. <p>for循环的可迭代对象内没有元素无法循环</p>
  21. {% endfor %}
  22. with取别名
  23. {% with 复杂获取数据句式 as 别名 %}
  24. {% endwith %}

自定义标签过滤器、标签、inclusion_tag

必须先操作的三个步骤
1.在应用下创建一个名称为:templatetags 文件夹(名字必须为该名字)
2.templatetags下创建一个名字为任意的py文件
3.在py文件内书写
from django import template
register = template.Library()

  1. # 自定义过滤器
  2. @register.filter(name='sum')
  3. def mysum(v1, v2):
  4. return v1 + v2
  5. <h1>自定义过滤器使用</h1>
  6. {% load mytags %}
  7. {{ q|sum:q1
  8. #自定义标签
  9. @register.simple_tag(name='bg')
  10. def bgm(a,b,c,d):
  11. return a+b+c+d
  12. <h1>自定义标签使用</h1>
  13. {% load mytags %}
  14. {% bg a b c d %}
  15. # 自定义inclusion_tag
  16. @register.inclusion_tag(name='inc')
  17. def incl_tag(n):
  18. data = ['第{}项'.format(i) for i in range(n)]
  19. return locals()
  20. <h1>自定义inclusion_tag使用</h1>
  21. {% load mytags %}
  22. {% inc 10 %}

模版的继承

  1. {% extends 'home.html' %}
  2. 继承home页面模版
  3. 声明哪块代码可以被修改
  4. {% block content %}
  5. 模版内能被修改的代码块
  6. {% endblock %}
  7. 使用:
  8. {% block content %}
  9. 被修改后的代码块
  10. {% endblock %}
  11. 注意:该修改是在继承页面进行修改,不在被继承的模板页面进行修改
  12. 一般情况下,模版下的jscsshtml三块都能修改,实现同一个页面,不同的效果
  13. 划分的区域越多,模版的拓展性越强

模版的导入
{% include ‘home.html’ %}