目录
{{ }}和 {% %}
模板中支持的写法:
- {# 取l中的第一个参数 #}
- {{ l.0 }}
- {# 取字典中key的值 #}
- {{ d.name }}
- {# 取对象的name属性 #}
- {{ person_list.0.name }}
- {# .操作只能调用不带参数的方法 #}
- {{ person_list.0.dream }}
过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可。
语法:
{{obj|filter__name:param}} 变量名字|过滤器名称:变量
{{ value|default:"nothing"}}
{{ value|length }}
{{ value|filesizeformat }}
{{ value|slice:"2:-1"}}
如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d H:i:s"}}
value="">点我"
-
- {{ value|safe}}
-
-
- from django.utils.safestring import mark_safe
- res = mark_safe('
HELLO WORLD
')
{{ value|truncatechars:9}}
| 过滤器 | 描述 |
| 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 person in person_list %}
-
{{ person.name }}
- {% endfor %}
-
- # 可以利用{% for obj in list reversed %}反向完成循环。
遍历一个字典:
- {% for key,val in dic.items %}
-
{{ key }}:{{ val }}
- {% endfor %}
-
- {% for foo in d.keys %}
-
{{ foo }}
- {% endfor %}
-
- {% for foo in d.values %}
-
{{ foo }}
- {% endfor %}
-
- {% for foo in d.items %}
-
{{ foo }}
- {% endfor %}
注:循环序号可以通过{{forloop}}显示
- # for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
- {% for person in person_list %}
-
{{ person.name }}
-
- {% empty %}
-
sorry,no person here
- {% endfor %}
- {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
- if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
- {% if num > 100 or num < 0 %}
-
无效
- {% elif num > 80 and num < 100 %}
-
优秀
- {% else %}
-
凑活吧
- {% endif %}
- d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,
- 333,{'info':'NB'}]}
-
- # with起别名
- {% with d.hobby.3.info as nb %}
-
{{ nb }}
- 在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
-
{{ d.hobby.3.info }}
- {% endwith %}
-
-
- {% with total=business.employees.count %}
- {{ total }} employee{{ total|pluralize }}
- {% endwith %}
- 不要写成as
{% csrf_token%}
- 语法:{% include '模版名称' %}
-
- 如:{% include 'adv.html' %}
母板
- html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta http-equiv="x-ua-compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Titletitle>
- {% block page-css %}
-
- {% endblock %}
- head>
- <body>
-
- <h1>这是母板的标题h1>
-
- {% block page-main %}
-
- {% endblock %}
- <h1>母板底部内容h1>
- {% block page-js %}
-
- {% endblock %}
- body>
- html>
注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
{% extends 'layouts.html' %}
块(block)
{% block xxx %}来定义"块"。- {% block page-main %}
- <p>世情薄p>
- <p>人情恶p>
- <p>雨送黄昏花易落p>
- {% endblock %}
组件
{% include 'navbar.html' %}