1 模版简介
DTL:django模板语言
核心:
变量 {{ }}
标签 {% %}
2 模版语法之变量
-变量渲染:{{变量}}
-变量深度查询:{{变量.索引/key值/方法}}
def index(request):
age=18
name='lqzzzzzzzzzzzzzzz'
name2='lqz is very big'
dic={'name':'lqz','age':18,'hobby':['play','game']}
ll=['lqz',18,'ppp',123]
ll3=[[1,5,3],[6,9]]
ll2=[]
href='<a href="http://www.baidu.com">点我看美女</a>'
href2=mark_safe(href)
ctime=datetime.datetime.now()
file_size=102453425342345234523
bol=True
# locals() 代表把当前函数中的所有局部变量,传到模板中
class Person():
def __init__(self,name):
self.name=name
def test(self):
return self.name
def __str__(self):
return self.name
@classmethod
def test2(cls):
return '123'
lqz=Person('lqz')
# 在模板上写变量的时候,相当于执行了print方法,如果是方法,不能加括号,它会自动加括号,但是不支持传参数
print(lqz)
print(lqz.test())
return render(request,'index.html',locals())
3 模版之过滤器
变量之过滤器(是个函数)
-语法:(后面只能传一个参数)
{{变量名|过滤器的名字:参数}}
-内置过滤器:
数字+3:
<p>{{ age|add:3 }}</p>
name的长度:
<p>{{ name|length }}</p>
bol有值取值没有默认为123
<p>{{ bol|default:'123' }}</p>
<p>{{ ll2|default:'我是空的' }}</p>
对文件大小的转换格式
<p>{{ file_size|filesizeformat }}</p>
时间:
<p>{{ ctime }}</p>
<p>{{ ctime|date:'Y年m月' }}</p>
从索引2到4切出来
<p>{{ name|slice:'2:4' }}</p>
从开头切出6个字符后面三个是...
<p>{{ name|truncatechars:6 }}</p>
切出2个词语后跟...
<p>{{ name2|truncatewords:2}}</p>
' 可以点击跳转
<p>{{ href|safe }}</p>
views中的代码: href='<a href="http://www.baidu.com">打开百度</a>
4 模版之标签
-语法:{% %}
-foo是一个可迭代对象
{% for a in foo %}
{% endfor %}
-forloop:counter,couter0,revcounter,revcouter0,first,last,parentloop:父循环的forloop对象
-for--empty的使用
{% for foo in ll2 %}
{{ foo }}
{% empty %}
没有值啊
{% endfor %}
-if判断
{% if ll2 %}
ll2 有值
{% elif ll %}
ll有值
{% else %}
ll2 没有值
{% endif %}
-with重命名
{% with dic.hobby.1 as a %}
{#{% with a=dic.hobby.1 %}#}
{{ a }}
<p>aaaa</p>
{{ a }}
{% endwith %}
5 自定义过滤器
1 确认app是否在settings中注册
2 在app下创建templatetags的模块(名字固定)
3 在模块下创建py文件(名字随意)--->在模板中{% load py文件名字%}
4 在py文件中写过滤器
from django.template import Library
register = Library()
#指定了name之后,模板上使用的时候,直接用name调用,如果没指定name,就用函数的名字
# 过滤器最多有两个参数
@register.filter(name='myadd')
def my_add(a,b):
print(a+b)
return a+b
5 模板中使用
-1 {% load py文件名字%}
-2 {{ 变量|myadd:1}}
6 自定义标签
1 确认app是否在settings中注册
2 在app下创建templatetags的模块(名字固定)
3 在模块下创建py文件(名字随意)--->在模板中{% load py文件名字%}
4 在py文件中写过滤器
from django.template import Library
register = Library()
#指定了name之后,模板上使用的时候,直接用name调用,如果没指定name,就用函数的名字
# 过滤器最多有两个参数
@register.simple_tag(name='mytag')
def my_tag(a,b,c):
return a+b+c
5 模板中使用
-1 {% load py文件名字%}
-2 {% mytag 参数1 参数2 参数3%}
7 标签和过滤器的区别:
1 标签可以传多个参数,过滤器最多只能传2个
2 使用过滤器{{ }} 标签使用:{% %}
3 ****重点:过滤器可以放在if判断后,标签不能放在if判断后