模板之过滤器
# HTML被直接硬编码在 Python代码之中,Django的 模板系统(Template System)
# 过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可
过滤器名称就是函数名# 语法:
{{ obj|filter__name:param }} 变量名字|过滤器名称:变量default:如果一个变量是false或者为空,使用给定的默认值,否则使用变量的值
length:返回值的长度,对字符串和列表都起作用
filesizeformat:将值格式化为一个 “人类可读的” 文件尺寸 # '13 KB', '4.1 MB'
date:日期格式
slice:切片
truncatechars:如果字符串字符多于指定的字符数量,那么会被截断,省略号序列(“…”)结尾
safe:告诉Django这段代码是安全的不必转义
# views.py from django.shortcuts import render # Create your views here. def index(request): a = False l = [1,2,3,4,5] size = 43434343434342 import datetime ctime = datetime.datetime.now() value = 'helloworld' from django.utils.safestring import mark_safe # 有很多时候前端的代码也可以在后端处理 s1 = mark_safe('<h1>hello</h1>') return render(request,'index.html',locals())
# index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css"> <script src="bootstrap-3.4.1-dist/js/bootstrap.min.js"></script> </head> <body> {{ a|default:'hello' }} {{ l|length }} {{ size| filesizeformat}} {{ ctime| date:"Y-m-d"}} {{ value| slice:'2:-1'}} {{ s1|safe }} </body> </html>
# 其它过滤器(了解)
upper 以大写方式输出 add 给value加上一个数值 addslashes 单引号加上转义号 capfirst 第一个字母大写 center 输出指定长度的字符串,把变量居中 cut 删除指定字符串 date 格式化日期 default 如果值不存在,则使用默认值代替 default_if_none 如果值为None, 则使用默认值代替 dictsort 按某字段排序,变量必须是一个dictionary dictsortreversed 按某字段倒序排序,变量必须是dictionary divisibleby 判断是否可以被数字整除 escape 按HTML转义,比如将”<”转换为”<” filesizeformat 增加数字的可读性,转换结果为13KB,89MB,3Bytes等 first 返回列表的第1个元素,变量必须是一个列表 floatformat 转换为指定精度的小数,默认保留1位小数 get_digit 从个位数开始截取指定位置的数字 join 用指定分隔符连接列表 length 返回列表中元素的个数或字符串长度 length_is 检查列表,字符串长度是否符合指定的值 linebreaks 用/或/标签包裹变量 linebreaksbr 用/标签代替换行符 linenumbers 为变量中的每一行加上行号 ljust 输出指定长度的字符串,变量左对齐 lower 字符串变小写 make_list 将字符串转换为列表 pluralize 根据数字确定是否输出英文复数符号 random 返回列表的随机一项 removetags 删除字符串中指定的HTML标记 rjust 输出指定长度的字符串,变量右对齐 slice 切片操作, 返回列表 slugify 在字符串中留下减号和下划线,其它符号删除,空格用减号替换 stringformat 字符串格式化,语法同python time 返回日期的时间部分 timesince 以“到现在为止过了多长时间”显示时间变量 timeuntil 以“从现在开始到时间变量”还有多长时间显示时间变量 title 每个单词首字母大写 truncatewords 将字符串转换为省略表达方式 truncatewords_html 同上,但保留其中的HTML标签 urlencode 将字符串中的特殊字符转换为url兼容表达方式 urlize 将变量字符串中的url由纯文本变为链接 wordcount 返回变量字符串中的单词数
模板之for标签
# 标签看起来像是这样的: {% tag %}
# 标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加 载其后的变量将使用到的额外信息到模版中。
# 一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})for标签:
{% for person in person_list %} <p>{{ person.name }}</p> {% endfor %} #可以利用{% for obj in list reversed %}反向完成循环。
遍历一个字典:
{% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %} {% for foo in d.keys %} <p>{{ foo }}</p> {% endfor %} {% for foo in d.values %} <p>{{ foo }}</p> {% endfor %} {% for foo in d.items %} <p>{{ foo }}</p> {% endfor %}
注:循环序号可以通过{{forloop}}显示
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环for … empty:以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for person in person_list %} <p>{{ person.name }}</p> {% empty %} <p>sorry,no person here</p> {% endfor %}
模板之if 标签和with
if标签:
# {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值)对应的内容块会输出
# if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断
{% if num > 100 or num < 0 %} <p>无效</p> {% elif num > 80 and num < 100 %} <p>优秀</p> {% else %} <p>凑活吧</p> {% endif %}
with标签:
# 使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的
d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]} # with起别名 {% with d.hobby.3.info as nb %} <p>{{ nb }}</p> 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式 <p>{{ d.hobby.3.info }}</p> {% endwith %} {% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %} 不要写成as
模板的继承和导入
# 语法:{% include '模版名称' %} 如:{% include 'adv.html' %}
{% block css %} <style> h1{ color: red; } </style> {% endblock %} {% block js %} <script> alert('login') </script> {% endblock %} {% include 'haha.html' %}
标题
1、
2、
3、
标题
1、
2、
3、
标题
1、
2、
3、
标题
1、
2、
3、
标题
1、
2、
3、
标题
1、
2、
3、