• 五、模板层


    一、模板语法的书写格式

    	a. 变量相关
    	
    		{{ }}
    	
    	b. 逻辑相关
    	
    		{% %}
    

    二、模板语法的传值

    1. 给html页面传值的两种方式
    
    	a. 指定值
    	
    		return render(request, 'test.html', {'name': 'byx'}) 
    		        
    	b. locals(),传递当前名称空间中所有名字
    
    		return render(request, 'test.html', locals())
    
    
    2. 值的数据类型
    
    	a. 支持所有python基本数据类型
    	
    	b. 只要是能加括号调用的,html会自动加括号调用(函数、对象.方法)
    	
    	c. 传函数名时,会展示函数返回值。
    	
    	d. 直接传对象,显示的是对象的地址
    

    三、模板语法的取值

    模板语法取值统一采用句点符
    
    1. 点名字
    
    	<p>{{ user_dict.name }}</p>
    
    2. 点索引
    
    	<p>{{ user_list.2 }}</p>
    
    3. 链式取值
    
    	<p>{{ user_dict.info.detail_info.2 }}</p>
    
    4. 给数据起别名
    	
    	别名只能在with内部使用
    	
    	{{% with user_dict.info.detail_info.2 as asset %}}
    	
    	<p>{{ asset }}</p>
    	
    	{{% endwith %}}
    

    四、模板语法之过滤器

    1. 统计长度
    	
    	无法统计默认返回0
    	
    	<p>统计长度:{{ s|length }}</p>
    
    2. 加法运算
    
    	数字相加或字符串拼接,不符合时返回空
    
    	<p>加法运算:{{ n|add:10 }}</p>
    	<p>加法运算:{{ s|add:'byx' }}</p>
    
    3. 切片操作
    
    	顾头不顾尾
    
    	<p>切片操作:{{ l|slice:'0:5:2' }}</p>
    
    4. 转成文件大小格式
    
    	<p>文件大小:{{ file_size|filesizeformat }}</p>
    
    5. 截取文本内容
    	
    	a. 按字符截取,截取17个字符加上‘...’
    	
    	<p>截取文本内容:{{ text|truncatechars:20 }}</p>
    	
    	b. 按空格截取文本
    	
    	<p>截取文本内容:{{ text|truncatewords:20 }}</p>
    
    6. 判断是否有值
    
    
    	有值展示值,没值展示默认值
    	
    	<p>判断是否有值:{{is_value|default:'没接收到值'}}</p>
    
    7. 展示带有标签的文本
    
    	a. 除非前后端转义,不会转成html标签
    	
    		h = '<script>alert(123)</script>'
    		
    		<p>展示带有标签的文本:{{ h }}</p>
    	
    	b. 前端转义
    	
    		<p>展示带有标签的文本:{{ h|safe }}</p>
    	
    	c. 后端转义
    	
    		from django.utils.safestring import  mark_safe
    		
    		
    		h = '<script>alert(123)</script>'
    		h = mark_safe(h)
    

    五、模板语法之标签

    1. for循环
    
    	a. 基本语法
    	
    		{% for foo in x %}
    		
    		    <p>{{ forloop }}</p>
    		    <p>{{ foo }}</p>
    		
    		{% endfor %}
    		
    	
    	b. forloop参数
    	
    		forloop.first        # 是否是第一个
    		forloop.last         # 是否是最后一个
    		forloop.counter      # 从1开始计数所在序号
    		forloop.counter0     # 从0开始计数所在序号
    	
    			
    	c. 当接收的对象为空时执行{% empty %}
    	
    		{% empty %}
    		        <p>现在打印我这句话</p>
    		
    	
    2. if判断
    
    	基本语法
    	
    		{% if s %}
    		    <p>s有值</p>
    		
    		{% else %}
    		    <p>s没有值</p>
    		
    		{% endif %}
    		
    
    
    3. for循环if判断结合示例
    
    	{% for foo in l %}
    	
    	    {% if forloop.first %}
    	        <p>这是第一条数据</p>
    	
    	    {% if forloop.last %}
    	        <p>这是最后一条数据</p>
    	
    	    {% else %}
    	        <p>{{ foo }}</p>
    	
    	    {% endif %}
    	
    	{% endfor %}
    

    六、自定义过滤器、标签和inclusion_tag

    1. 前置步骤
    
    	a. 在应用名下新建一个名字为templatetags的文件夹
    	
    	b. 在该文件夹内,新建一个py文件
    	
    	c. 在该py文件中写下下面代码
    		
    		from django.template import Library
    		
    		register = Library()
    
    	
    2. 自定义过滤器
    
    	只能有2个参数
    
    	a. py文件中编写
    		
    		@register.filter(name='tag1')
    		def index(a, b):
    		    return a + b
    	
    	b. html页面中使用
    	
    		{% load mytag %}..0 
    		<p>{{ 2|tag1:3 }}</p>
    	
    p.s 自定义的过滤器可以在逻辑语句中使用,自定义标签不行
    	
    		{% load mytag %}
    		
    		{% if s %}
    		    <p>s有值</p>
    		
    		{% else %}
    		    <p>s没有值</p>
    		
    		{% endif %}
    	
    
    3. 自定义标签
    
    	能有多个参数,参数之间空格隔开
    
    	a. py文件中编写
    		
    		@register.simple_tag(name='tag2')
    		def index(a, b, c, d):
    		    return '%s%s%s%s' %(a, b, c, d)
    	
    	b. html页面中使用
    	
    		{% load mytag %}
    		{% tag2 '1' '2' '3' '4' %}
    	
    
    4. 自定义inclusion_tag
    
    	将传入的参数传给第三方html页面渲染,显示到当前html页面。当你使用一些页面组件,并且该页面组件需要参数才能正常渲染时使用。
    	
    	a. py文件中编写
    	
    		@register.inclusion_tag('mytag.html', name='tag3')
    		def index(n):
    		    l = []
    		    for i in range(n):
    		        l.append('第%s项' %i)
    		    return locals()
    	
    	b. 第三方html页面
    	
    		<ul>
    		    {% for foo in l %}
    		        <li>{{ foo }}</li>
    		    {% endfor %}
    		</ul>
    	
    	c. html页面
    
    		{% load mytag %}
    		{% tag3 10 %}
    

    七、模板的继承

    1. 继承方法
    
    	a. 在原页面(home.html)上划定更改区域
    	
    		{% block myContent %}
    		
    		        <div class="jumbotron"...>
    		
    		{% endblock %}
    	
    	b. 新页面
    	
    		{% extends 'home.html' %}
    		
    		{% block myContent %}
    		
    		    自己修改的内容
    		
    		{% endblock %}
    
    2. 可以用block.super沿用父类方法(可多次沿用)
    
    		{% extends 'home.html' %}
    		
    		{% block myContent %}
    		
    		    {{ block.super }}
    		    {{ block.super }}
    		
    		{% endblock %}
    
    
    3. 通常一个模板页面包含三个区域:css区域、js区域和html区域。
    

    八、模板的导入

    1. 作用
    
    	将html页面当做模块直接导入使用
    
    2. 代码
    
    	{% extends 'home.html' %}
    	
    	{% block myContent %}
    	    
    	    {{ block.super }}
    	    {{ block.super }}
    	    {% include 'form.html' %}
    	
    	{% endblock %}
  • 相关阅读:
    MS SQLSERVER 第三天
    MS SQLSERVER 第二天
    今天开始我的 MSSQLSERVER 之旅
    从今天开始就正式我的博客之旅
    mac 本地搭建mybatisGenerator代码生成环境
    idea中git远程版本回退
    Junit调试解决本地多线程异步调用
    Lambda表达式总结
    JDK8函数式编程之Stream API
    MySql分页查询慢的解决方案
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/12052206.html
Copyright © 2020-2023  润新知