1.变量
{{ 变量名 }} 这里的变量名是后端中已经定义的变量名
模板层支持的数据类型有字符串、数字、列表、元祖、字典、函数(在引用函数时不需要加括号就可以直接的运行了)、对象
注意:后台一定要穿local()
return render(request, 'index.html', locals())
深度查询用 .
<p>把对象列表中egon年龄取出来:{{ person_list.1.age }}</p>
前端代码:
<h1>模板语言之变量</h1>
<p>字符串:{{ name }}</p>
<p>数字:{{ age }}</p>
<p>列表:{{ ll }}</p>
<p>元祖:{{ tu }}</p>
<p>字典:{{ dic }}</p>
{#只写函数名:相当于函数名(),执行该函数#}
<p>函数:{{ test }}</p>
{#对象内存地址#}
<p>对象:{{ lqz }}</p>
<p>列表套对象:{{ person_list }}</p>
<p>字典套对象:{{ person_dic }}</p>
<hr>
<h1>深度查询</h1>
<p>列表第0个值:{{ ll.0 }}</p>
<p>列表第3个值:{{ ll.3 }}</p>
<p>字典取值:{{ dic.name }}</p>
<p>字典取列表值:{{ dic.ll }}</p>
{#再继续取值,继续点#}
<p>对象取数据属性:{{ lqz.name }}</p>
<p>对象取绑定给对象的函数属性:{{ lqz.get_name }}</p>
<p>对象取绑定给类的函数属性:{{ lqz.cls_test }}</p>
<p>对象取静态方法:{{ lqz.static_test }}</p>
<p>把对象列表中egon年龄取出来:{{ person_list.1.age }}</p>
{#拓展:不能调有参数的方法#}
<p>字符串的方法:{{ name.upper }}</p>
后台代码:
name = 'lqz'
age = 18
ll = [1, 2, 'lqz', 'egon']
ll2=[]
dic2={}
tu = (1, 2, 3)
dic = {'name': 'lqz', 'age': 18, 'll': [1, 2, 4]}
# 函数
def test():
print('lqz')
return 'zhouxiang dsb'
# 在模板上相当于执行该函数,并打印
print(test())
# 类和对象
class Person():
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
return self.name
@classmethod
def cls_test(cls):
return 'cls'
@staticmethod
def static_test():
return 'static'
# 模板里不支持带参数
def get_name_cs(self,ttt):
return self.name
lqz=Person('lqz',18)
egon=Person('egon',18)
person_list=[lqz,egon]
person_dic={'lqz':lqz}
file_size=1024
import datetime
ctim=datetime.datetime.now()
h1='<h1>你好</h1>'
script='<script>alert(111)</script>'
# user='lqz'
user=''
# return render(request,'index.html',{'name':name})
# locals() 会把*该*视图函数内的变量,传到模板
return render(request, 'index.html', locals())
2.过滤器
- 语法:{{第一个参数|过滤器名字:第二个参数}}
- 常用的过滤器:length、default、slice、date、filesizeformat、truncatechars、truncatewords、safe、add
<p>统计字符串长度:{{ name|length }}</p>
<p>统计列表长度:{{ ll|length }}</p>
<p>过滤器之默认值:{{ ll2|default:'没有值' }}</p>
<p>
过滤器之filesizeformat--1:{{ 2013344444444444444444444445555444444444444444444444444444444444444444444444444444444444443|filesizeformat }}</p>
<p>过滤器之filesizeformat--2:{{ file_size|filesizeformat }}</p>
<p>过滤器之不使用date:{{ ctim }}</p>
<p>过滤器之date:{{ ctim|date:'Y-m-d' }}</p>
{#前闭后开区间#}
<p>过滤器之slice:{{ ll|slice:'2:-1' }}</p>
{#支持步长#}
<p>过滤器之slice-字符串:{{ name|slice:'0:3:3' }}</p>
{#三个起步#}
<p>过滤器之truncatechars:{{ 'dafddfafgadfgaasdgadgfadaf'|truncatechars:5 }}</p>
<p>过滤器之truncatewords:{{ '我 dfaf ga dfgaas 你 dgf adaf'|truncatewords:5 }}</p>
<p>过滤器之不用safe:{{ h1 }}</p>
<p>过滤器之用safe:{{ h1|safe }}</p>
<p>过滤器之不用safe:{{ script }}</p>
{#<p>过滤器之用safe:{{ script|safe }}</p>#}
<p>过滤器之用add:{{ 12|add:'1' }}</p>
<p>过滤器之用add:{{ 'egon'|add:'dsb' }}</p>
3.标签
-
1.语法:{% %}
-
2.for标签 forloop:对象(里面有好多东西:parentloop,last,first,counter....)忘记的话, 自己打印一下 empty:被循环的对象是空,才走它
遍历一个列表
{% for person in person_list %} <p>{{ person.name }}</p> {% endfor %}
遍历一个字典:
{% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %
-
for+empty+parentloop
{% for foo in nl %}
{% if forloop.first %}
第一
{% elif forloop.last %}
最后
{% else %}
{{ foo }}
{% endif %}
{% empty %}
为空啊
{% endfor %}
- 3.if标签
{% if forloop.first %}
<p>第一次的我 </p>
{% elif forloop.last %}
<p>最后的我 </p>
{% else %}
<p>{{ foo }}</p>吧
{% endif %}
- 4.with 重命名,应用在变量名过长
{% with dic.ll.2 as ttt %}
{{ ttt }}
{{ ttt }}
{% endwith %}
4.自定义标签
- 标签不能用在if判断,过滤器,可以用在if判断
- 1.先app是不是已经在setting中注册
- 2.在app下创建一个templatetags(名字不能变)的文件夹(模块)
- 3.在模块下创建一个py文件,名字随意:mytag.py
- 4.mytag.py中的内容:
from django.template import Library
register = Library()
@register.filter(name='myadd')
def sadd(str1):
return str1 + 1
- 5.在模板中使用
{% load mytag %}
{{'lqz'|myadd}}或{{'lqz'|sadd}}
5.自定义过滤器
-
1-3.前三步与自定义标签相同
-
4.mytag.py中的内容:
from django.template import Library register = Library() @register.simple_tag() def addtest(): return '测试!'
-
5.使用
{% load mytag %} {% addtest %}