注意: 1,模板层语言注释:前端看不到 2,相当于Print了该变量 3,只写函数名,在模板里面相当于执行该函数 4,模板中不能调用有参函数的方法 5,深入查询:统一要用句点符
一,变量 在模板中在视图中设置
模板层 模板层
模板语言之变量
字符串:{{ name }}
数字:{{ age }}
列表{{ li }}
元组:{{ tu }}
字典:{{ dic }}
{# 只写函数名,相当于执行该函数#}函数:{{ test }}
{# 如果只写对象名,则显示的是对象的内存地址#}对象: {{ lqz }}
列表套对象:{{ person_list }}
字典套对象:{{ person_dic }}
深度查询
列表的第0个值
列表第3个值:{{ ll.3 }}
字典取值:{{ dic.name }}
字典取列表值:{{ dic.ll }}
{# 想要继续取值,则继续往下点就好了#}对象取数据属性:{{ lqz.name }}
对象取绑定给对象的函数属性:{{ lqz.get_name }}
对象取绑定给类的函数属性:{{ lqz.cls_test }}
对象取静态方法:{{ lqz.static_test }}
把对象列表中egon年龄取出来:{{ person_list.1.age }}
字符串的方法(了解)
字符串的方法:{{ name.upper }}
from django.shortcuts import render, HttpResponse, redirect from django.http import JsonResponse # Create your views here. # def index(request): # l = [{'name': 'lqz', '年龄': 18}, {'姓名': 'lqz2', 'age': 18}] # return JsonResponse(l, safe=False, json_dumps_params={'ensure_ascii': False}) def index(request): name = 'jack' age = '20' l1 = [1, 2, 'lily'] ll2 = [] dic2 = {} tu = (1, 2, 3) dic = {'name': 'lqz', 'age': 18, 'll': [1, 2, 4]} # 函数 def test(): print('执行此函数') return 'test 的返回值' # 类和对象 class Person(): def __init__(self, name, age): self.name = name self.age = age def get_name(self): return '类Person中的get_name方法的返回值' @classmethod def cls_test(cls): return '类Person中的cla_test方法的返回值' @staticmethod def static_test(): return '类Person中的static_test方法的返回值' # 模板中不可以执行带参数的方法 def get_name_cs(self, tt): 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 = '
你好
' # 导入这个之后,直接把文本转换成html文件可以解析的语句 # 导入from django.utils.safestring import mark_safe # h1 = mark_safe(h1) script = '' # user='lqz' user = '' return render(request, 'index.html', locals())
二,过滤器
语法:{{ 第一个参数|过滤器名字:第二个参数 }}
模板语言之过滤器
{#后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数#}
统计字符串长度:{{ name|length }}
统计列表长度:{{ ll|length }}
{# 当前面的列表或者字符串为空的时候才能返回设置的默认值 #}
过滤器之默认值:{{ ll2|default:'没有值' }}
{# filesizeformat把前面的数值转换成可读的单位,一般字符串里面也是数值 #}
过滤器之filesizeformat--1:{{ 2013344444444444444444444445555444444444444444444444444444444444444444444444444444444444443|filesizeformat }}
过滤器之filesizeformat--2:{{ file_size|filesizeformat }}
{# ctim是把后台传过来的数据,完整的打印在页面上面,使用data之后,就把ctim时间规范成后面自定义的格式 #}
过滤器之不使用date:{{ ctim }}
过滤器之date:{{ ctim|date:'Y-m-d' }}
{#前闭后开区间#}
过滤器之slice:{{ ll|slice:'2:-1' }}
{#支持步长#}
过滤器之slice-字符串:{{ name|slice:'0:3:3' }}
{#三个起步,显示da...#}
过滤器之truncatechars:{{ 'dafddfafgadfgaasdgadgfadaf'|truncatechars:5 }}
{# 这个显示从开始数五个单词... #}
过滤器之truncatewords:{{ '我 dfaf ga dfgaas 你 dgf adaf'|truncatewords:5 }}
{# 不加safe,django不会解析后台的数据,直接输出,加了safe之后,页面可以解析后台的数据比如: #}
过滤器之不用safe:{{ h1 }}
过滤器之用safe:{{ h1|safe }}
过滤器之不用safe:{{ script }}
{#过滤器之用safe:{{ script|safe }}
#}
{# add把传入的两个整数进行相加,传入的两个字符串进行拼接 #}
过滤器之用add:{{ 12|add:'1' }}
过滤器之用add:{{ 'egon'|add:'dsb' }}
三,标签
for循环标签 if条件标签 with是重命名标签
模板语言之标签
{% for foo in ll %}
{{ forloop }}
{# forloop里面的值,具体如下 #}
{# parentloop:for循环父级的这些全部内容,counter0:从0开始计数,counter:从1开始计数,revcounter:倒着计数,末尾为1,revcounter0:倒着计数,末尾为0 #}
{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}
{% endfor %}
{% for foo in ll %}
{% for i in person_list %}
取出外层是第几次循环
{{ forloop.parentloop.counter }}
{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}
{% endfor %}
{% endfor %}
**************循环的对象是空,才会走到empty,而不是对象里面的东西为空
{% for foo in dic2 %}
{{ foo }}
{% empty %}
傻逼了
{% endfor %}
只循环字典的话,取到的是key值
{#{% for foo in dic %}#}
取到value的值
{#{% for foo in dic.values %}#}
取到key 和 value的值
{# 当循环的是个空列表的时候,才执行empty函数 #}
{% for k,foo in dic.items %}
{{ k }}----->{{ foo }}
{% empty %}
傻逼了
{% endfor %}
{% if user %}
退出
{% else %}
登录
注册
{% endif %}
for循环判断如果是第一次,打印第一次,其他打印正常值
{% for foo in ll %}
{% if forloop.first %}
第一个参数
{% elif forloop.last %}
最后一个参数
{% else %}
{{ foo }}
{% endif %}
{% endfor %}
{#with 相当于取别名,作用:变量太长,可以简化#}
{#{% with name as ttt %}#}
{# {{ ttt }}#}
{# {{ name }}#}
{# {{ user }}#}
{##}
{#{% endwith %}#}
------
{% with dic.ll.2 as ttt %}
{{ ttt }}
{{ ttt }}
{% endwith %}
************************for ,if,with 都要有结束******************
四,自定义标签和过滤器 注意:标签不能用在if判断,过滤器可以用在if判断里面 自定义过滤器:1,确定app是否在setting中注册 2 在app下创建一个templatetags的文件夹(模块)(****名字不能变***) 3 在模块下创建一个py文件,名字随意:mytag.py 4 # 第一步,导入template from django.template import Library # 第二步,定义一个叫register的变量=template.Library() register = Library() 5 写一个函数,用@register.filter(name='yyy')装饰一下(可以指定别名) def str_add(str1, str2): #一定要有返回值 # 业务逻辑很复杂 return str1 + str2 6 在模板里:(新定定义的标签,过滤器,都要重启程序) -{% load mytag %} -{{'lqz'|str_add:'nb'}}
自定义标签1,确定app是否在setting中注册 2 在app下创建一个templatetags的文件夹(模块)(****名字不能变***) 3 在模块下创建一个py文件,名字随意:mytag.py 4 # 第一步,导入template from django.template import Library # 第二步,定义一个叫register的变量=template.Library() register = Library() 5 只是装饰器不一样 @register.simple_tag() def add_nb(value): return value+'nb' 6 在模板里:(多个参数,以空格区分) -{% load mytag %} -{% add_nb 'lqz'%}