模板层
变量查询
使用.进行深度查询(可以查询列表的索引,字典的key以及对象的方法,但是方法不能加括号,所以只能使用没有参数的方法)
views中变量准备:
now = datetime.datetime.now()
emp_list = []
dic = {'name': 'lqz', 'age': 18, 't': [1, 2, [2, 3]]}
emp_str = ''
list2 = [1,2,3,6,5]
list3 = [[1,2,3],[4,5,6],[7,8,9]]
list4 = [[],[4,5,6],[7,8,9]]
tag_str = '<a href="https://www.baidu.com">点我</a>'
过滤器
返回不同格式的日期
{{ now|date:'Y-m-d H:i:s' }}
{{ now|date }} # 有默认值可以不传参数
如果一个变量是false,使用给定的默认值。否则,使用变量的值。
{{ emp_list|default:'我是空列表' }}
{{ emp_str|default:'我是空字符串' }}
返回值的长度。它对字符串和列表都起作用
{{ 'asdg'|length }}
将值格式化为一个 “人类可读的” 文件尺寸(例如 '13 KB', '4.1 MB')
{{ '1024'|filesizeformat }}
切片操作
{{ 'sadgdasfdsa'|slice:'1:4' }}
{{ list2|slice:'1:3' }}
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾,...会计入进长度
字符数:
{{ 'asgasdfasd'|truncatechars:'8' }}
单词数:...省略号不计入长度
{{ 'i am strong'|truncatewords:'2' }}
safe过滤器,可以使带标签的字符串直接被识别,不然会用>代替>等
{{ tag_str|safe }}
也可以在Views视图中处理
from django.utils.safestring import mark_safe
tag_str = mark_safe(tag_str)
俩参数可以传字符串和数字
{{ 12|add:3 }}
{{ 'eee'|add:"3rrr" }}
标签
for 和 if 标签,for中的forloop
{% for foo in list3 %}
{% for i in foo %}
{% if forloop.first %}
{{ i|add:'10' }}
{% elif forloop.last %}
{{ i|add:'100' }}
{% else %}
{{ i }}
{% endif %}
{% endfor %}
{% endfor %}
for中的empty
{% for foo in emp_str %}
{% empty %}
{{ '空' }}
{% endfor %}
with标签
注意:等号两边不能有空格
{% with aa=dic.name%}
{{aa}}
{%endwith%}
{% with dic.name as name %}
{{ name }}
{% endwith %}
自定义过滤器
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数
@register.filter(name='my_add')
def my_add(a,b):
if type(a) == type(b):
return a+b
else:
return str(a)+str(b)
7 模板内:
{% load my_test %}
{{'lqz'|my_add:'isbig' }} #最多只能传两个参数
自定义标签
1 先去setting里面把app名字配置上
2 再app目录下创建一个templatetags模块
3 写py文件(my_test.py)
4 from django import template
5 register=template.Library()
6 写函数
@register.simple_tag(name='factorial')
def factorial(x):
if type(x) != int:
return False
num = 1
for i in range(x):
num *= i+1
return num
7 模板:
{% load my_test %}
{% factorial 5 %} #以空格做分割,传参数
静态文件导入
方法一:
<link rel="stylesheet" href="/static/mycss.css">
方法二:改static文件的文件名不会受到影响
{% load static %}
<link rel="stylesheet" href="{% static 'mycss.css' %}">