模板层
Posted zhangpang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板层相关的知识,希望对你有一定的参考价值。
模版语法重点:
变量:{{ 变量名 }}
1 深度查询 用句点符
标签:{{% % }}
views.py
from django.shortcuts import render from django.http import JsonResponse ? # Create your views here. ? def index(request): 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())
1.模板语法变量
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {#模板语言注释:前端看不到#} {#相当于print了该变量#} <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> ? ? </body> </html>
2.模板语法过滤器
-语法:{{第一个参数|过滤器名字:第二个参数}} -常用过滤器:(详细用法见源码) -length -default -slice -date -filesizeformat -truncatechars -truncatewords -safe -add
HTML
<h1>模板语言之过滤器</h1> {#后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数#} <p>统计字符串长度:{{ name|length }}</p> <p>统计列表长度:{{ ll|length }}</p> <p>过滤器之默认值:{{ ll2|default:‘没有值‘ }}</p> <p>过滤器之filesizeformat--1:{{ 201334444444444444443|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.模板语法标签
-{% 标签 %} -for:forloop:对象(里面有好多东西:parentloop,last,first,counter....)忘记的话, 自己打印一下 empty:被循环的对象是空,才走它 for循环可以嵌套,也可以用if -if: {% if forloop.first %} <p>第一次的我 </p> {% elif forloop.last %} <p>最后的我 </p> {% else %} <p>{{ foo }}</p>吧 {% endif %} -with:重命名,应用在变量名过长 ********都要有结束********
HTML
<h1>模板语言之标签</h1> {% for foo in ll %} {{ forloop }} <p>{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}</p> {% endfor %} ? {% for foo in ll %} {% for i in person_list %} 取出外层是第几次循环 {{ forloop.parentloop.counter }} <p>{{ forloop.first }}--->{{ forloop.counter0 }}--->{{ forloop.revcounter }}----->{{ foo }}</p> {% endfor %} {% endfor %} ? {#**************循环的对象是空,才会走到empty,而不是对象里面的东西为空#} {% for foo in dic2 %} <p>{{ foo }}</p> {% empty %} 傻逼了 {% endfor %} ? {#只循环字典的话,取到的是key值#} {% for foo in dic %} {#取到value的值#} {% for foo in dic.values %} {#取到key 和 value的值#} {% for k,foo in dic.items %} <p>{{ k }}----->{{ foo }}</p> {% empty %} 傻逼了 {% endfor %} ? {% if user %} <a href="">退出</a> {% else %} <a href="">登录</a> <a href="">注册</a> {% endif %} ? {#for循环判断如果是第一次,打印第一次,其他打印正常值#} {% for foo in ll %} {% if forloop.first %} <p>第一次的我 </p> {% elif forloop.last %} <p>最后的我 </p> {% else %} <p>{{ foo }}</p> {% endif %} {% endfor %} ? <hr> with 相当于取别名,作用:变量太长,可以简化 {% with name as ttt %} {{ ttt }} {{ name }} {{ user }} ? {% endwith %} ? {% with dic.ll.2 as ttt %} {{ ttt }} ? {{ ttt }} ? {% endwith %}
4.自定义过滤器和标签
标签不能用在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‘%}
5.模板的导入与继承
模板的导入:
语法:{% include ‘模版名称‘ %}
模板的继承:
1. 写一个母版,留一个可扩展的区域(盒子),可以留多个盒子(留的越多,可扩展性越高) {%block 名字%} 可以写内容 {%endblock%}
2. 在子模板中使用: {%block 名字%} 子模板的内容 {%endblock 名字%}
6.静态文件相关配置
1 写死静态文件:<link rel="stylesheet" href="/static/css/mycss.css"> ? 2 使用 static标签函数: -{%load static%} #static返回值,会拼上传参的路径 -{% static "传参"%} <link rel="stylesheet" href="{% static ‘css/mycss.css‘ %}"> ? 3 使用get_static_prefix 标签 -{%load static%} #get_static_prefix返回值是:静态文件的地址,相当于/static/ -{% get_static_prefix %}css/mycss.css <link rel="stylesheet" href="{% get_static_prefix %}css/mycss.css">
以上是关于模板层的主要内容,如果未能解决你的问题,请参考以下文章