django之模板层

2019-04-13 14:48发布

注意: 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'%}