zoukankan      html  css  js  c++  java
  • 模板语法

    模板语法

    CBV源码剖析

    #FBV和CBV
    '''
    他们两个都是出现在视图函数views中的,视图函数没必要必须是函数,也可以是一个类,当我们定义一个类的时候就是CBV了,CBV下是通过在类内部定义请求方式的同名函数来进行不同的操作的。
    通过对源码的查看,可以看出其实本质上CBV也是FBV。当请求来的时候会去判断请求的方式,利用反射去执行定义的相应函数。
    '''
    # CBV的使用方式:
    from django.views import View  # 首先需要导入对应的模块
    url(r'^index/', views.MyCBV.as_view()) # as_view()是一个闭包函数
    
    '''
    在django启动的时候,带括号就会自动触发执行,as_view()返回其本身内部定义的一个view函数的内存地址,当匹配到路由的时候,就会执行该函数,函数内部的本质就是判断请求的方式,然后反射到类创建的对象来执行。
    '''
    

    看源码谨记:

    1. 先从对象自己找,再从产生对象的类中找,之后再去父类中找。
    2. 看源码看到了self,要知道该self传的是什么东东。

    模板语法传值

    整理出的规则:

    1. {{ }}:在前端中一般使用是变量相关
    2. {% %}:逻辑相关

    基本上所有的数据类型都可以传前端,在前端都可以直接使用{{}}来进行使用,容器类型都只能使用点的方式进行 ,同时还可以使用点索引的方式,两者还可以混用。

    传递函数名会自动加括号调用,不过不支持函数传参数。传类名的时候也会自动加括号调用进行实例化。

    过滤器

    过滤器就类似于是模板语法内置的内置语法,最多只能有两个参数。

    # 基本语法
    {{ 数据|过滤器:参数}}
    
    # 在写前端项目的时候,部分前端代码可以经由后段代码传到前端并进行解析。
    |safe  # 告诉前端这是安全的,然后会解析
    
    # 在后端向前端传需要导入模块
    from gjango.utils.safestring import mark_safe
    res = mark_safe('前端代码字符串') 
    
    统计长度:{{ s|length }}
    默认值:{{ s|default:'前面的false才会显示我' }}
    文件大小:{{ f|filesizeformat }}
    日期格式化:{{ time|date:'Y-m-d' }}
    切片操作(支持步长):{{ l|slice:'0:5:2' }}
    切取字符:{{ info|truncatechars:9 }}
    切取单词(按照空格进行切):{{ msg|truncatewords:9 }}
    移除特定的字符:{{ msg|cut:'A' }}
    拼接操作(可进行数字或者字符串):{{ n|add:10 }}
    转义:{{ hhh|safe }}
    转义:{{ res }}
    
    

    标签

    # for 循环
    {% for foo in l %}
    	<p>{{ forloop }}</p>
    	{% empty %}
        	l是空的时候执行的标签
    {% endfor %}
    
    # if判断
    {% if a %}
    	标签体
    {% elif s %}
    	标签体
    {% else s %}
    	标签体
    {% endif %}
    
    
    # with起别名
    
    {% with xxx as ooo %}
    	在这个内部就可以通过别名快速获取前面的xxx
    {% endwith %}
    

    自定义过滤器、标签和inclusion_tag

    '''
    首先进行三步:
    	1. 在应用下创建一个名字叫templatetags文件夹
    	2. 在该文件夹新爱创建任意名称的py文件
    	3. 在py文件中必须书写下面两句话:
    		from django import template
    		register = template.Library()
    
    接下来就可以进行自定义了
    '''
    @register.filter(name='过滤器名字')
    def my_tag(a):
        return XXX
    
    {% load py文件 %}
    
    {{ s|过滤器名字}}
    
    
    # 自定义标签(参数可以有多个)  相当于函数
    @register.simple_tag(name='标签名')
    def index(a,b):
        return '1,2,3'
     
    使用{% 标签名 参数 %}  # 多个参数之间使用空格
    
    
    # 自定义 inclusion_tag
    '''
    在html页面的某一个地方的页面需要传参数才能渲染出来,并且在多个页面都要使用,那么就可以考虑将该局部页面做成inclusion_tag形式
    其原理就是先定义一个方法,在页面上调用该方法并传值,该方法会传一些数据给html页面,然后将渲染好的结果放到调用的位置
    '''
    @register.inclusion_tag('html页面')
    def left(n):
        data = XXX
        return locals()  # 推荐是想用这一种
    	return {'data':data}
    
    {% left 5 %}  # 使用
    
    

    模板的继承

    当某些页面只需要局部进行更改而整体不会进行改变的时候,就可以使用模板的继承

    步骤如下:

    1. 创建一个html文件,将之全部内容删除。

    2. {% extends '继承的页面模板' %}

    3. {% block content %}

        模板内容
      

      {% endblock%}

      在模板页面找到需要进行修改的内容

    4. 在子页面对区域进行更改

      {% block content %}

        子页面内容
      

      {% endblock%}

    一般情况新爱模板页面应该至少有三块被修改的区域

    1. css区域
    2. html区域
    3. js区域
    {% block css %}
    {% endblock %}
      
    
    {% block content %}
    {% endblock %}
      
    {% block js %}
    {% endblock %}
    

    模块的导入

    加入某一个局部使用较多的话 可以当做模块进行导入

    {% incluse '模块文件' %}
    
  • 相关阅读:
    OAuth2在微服务架构中的应用
    使用SpringSecurity体验OAuth2 (入门2)
    SpringSecurity的配置分析
    SpringSecurity在Springboot下使用的初步体验
    Spring框架中的org.springframework.context.annotation.Import注解类
    使用SpringSecurity体验OAUTH2之一 (入门1)
    5. SpringBoot —— Actuator简介
    无题
    C# 委托的本质
    json 字符串 反序列化
  • 原文地址:https://www.cnblogs.com/liqianxin/p/12981751.html
Copyright © 2011-2022 走看看