"""
{{}}:变量相关
{% %}:逻辑相关
"""# 后端deftest(request):# 模板语法可以传递的后端数据类型
n =123
f =11.11
s ="奥特曼"
b =True
l =["aoteman","alterman"]
t =(111,333,222)
d={"name":"tiga","age":18}
se ={"呵呵","哈哈"}deffunc():return"aoteman123"classMyClass(object):defget_self(self):return"self"@staticmethoddefget_func():return"func"@classmethoddefget_class(cls):return cls
obj = MyClass()return render(request,"test.html",locals())# 前端<p>{{ n }}</p><p>{{ f }}</p><p>{{ s }}</p><p>{{ b }}</p><p>{{ l }}</p><p>{{ d }}</p><p>{{ t }}</p><p>{{ se }}</p><p>传递函数名会自动加括号调用 但是模板语法不支持给函数传额外的参数{{ func }}</p><p>传类的时候也会自动加括号 但是模板语法不支持传参{{ MyClass }}</p><p>{{ obj }}</p><p>{{ obj.get_class }}</p><p>{{ obj.get_self }}</p><p>{{ obj.get_func }}</p><p>内部能够自动判断出当前的变量名是否可以加括号调用 如果可以就会自动执行 针对的是函数名和类名</p># django 语法的取值 是固定的格式 只能采用“句点号”<p>{{ d.name }}</p><p>{{ l.0}}</p>
# for 循环{%for foo in se %}<p>{{ forloop }}</p>{% endfor %}{'parentloop':{},'counter0':0,'counter':1,'revcounter':2,'revcounter0':1,'first':True,'last':False}# if 判断{%if b %}<p>dark</p>{%elifTrue%}<p>souls</p>{%else%}<p>sekiro</p>{% endif %}# if 和 for 结合{%for foo in se %}{%if forloop.first %}<p>第一个</p>{%elif forloop.last %}<p>最后一个</p>{%else%}<p>算了吧</p>{% endif %}{% empty %}<p>for 循环可迭代对象是空时,即内部没有元素</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 %}# with 起别名{%with t as%}{% endwith %}
自定义标签、过滤器、inclusion_tag
"""
1. 在应用下创建一个名字必须叫(templatetags)文件夹
2. 在该文件夹内创建任意名称的 py 文件
3. 在该py文件内必须先书写下面两句话
from django import template
register = template.Library()
"""# 自定义过滤器@register.filter(name="aoteman")defmy_sum(v1, v2):return v1+v2
<h1>自定义的使用(过滤器最多有两个参数)</h1>{% load MyTag %}<p>{{ n|aoteman:666}}</p># 自定义标签(参数可以有多个)类似于自定义函数@register.simple_tag(name="plus")defindex(a,b,c,d):return"%s-%s-%s-%s"%(a,b,c,d)<h1>自定义标签的使用(可以有多个参数)</h1>{% load MyTag %}{#标签多个参数空格隔开#}{% plus "1""aoteman""alterman""2"%}# 自定义 inclusion_tag"""
内部原理
先定义一个方法
在页面上调用该方法 并且可以传值
该方法会生成一些数据然后传递给一个 html 页面
之后将渲染好的结构放到调用的位置
"""# 自定义 inclusion_tag@register.inclusion_tag(filename="menu.html")defleft(n):
data =["第{}项".format(i)for i inrange(n)]# return {"data": data} # 第一种传值returnlocals()# 将data传值给 menu.html # menu.html 页面<ul>{%for foo in data %}<li>{{ foo }}</li>{% endfor %}</ul># test.html<h1>自定义 inclusion_tag 的使用</h1>{% load MyTag %}{% left 10%}# 总结:当一个 html 页面需要传参数才能够动态的渲染出来,并且多个页面都需要使用到该局部,那么就考虑使用 inclusion_tag 形式