zoukankan      html  css  js  c++  java
  • templates 模板层

    1.模板简介

    DTL:django模板语言

    核心:

    变量{{}}

    标签{% %}

    render 渲染页面,可以通过locals()将函数的私有属性

    views文件下内容

     

    def index(request):
        age = 18
        name = "lqz"
        dic = {'name':'msj',"age":25,'hobbies':['paly','game']}
        li1 = [18,'lqz','ppp',123]
    
        class Person:
            def __init__(self,name):
                self.name = name
            def test(self):
                print('test')
                return 'test'
            @classmethod
            def test_classmethod(cls):
                print('类方法')
                return '类方法'
    
            @staticmethod
            def staticmethod_test():
                print("静态方法")
                return '静态方法'
    
            def __str__(self):
                return 'Person'
    
        lqz= Person('lqz')
        egon = Person('egon')
        person_list = [lqz,egon]
    
        def aaa():
            return 'aaaaaaa'
    
        bol1 = False
        bol2 = []
        bol3 = [1,]
    
        file_size = 10240
    
        ctime = datetime.datetime.now()
    
        new_name= 'abcdefghijk'
    
        new_words = "you will have a good day"
    
        a = '<a href="http://www.baidu..com">点击连接</a>'
    
    
        return render(request,'index.html',locals())
    #locals(),将所有的index属性的作为参数传给模板变量
    View Code

    2.模板语法之变量

    变量渲染:{{}}

    变量深度查询:{{变量。索引/key/方法}}

    <h2>基本的变量解析使用的两个{}的用法+变量名</h2>
    <p>{{ age }}</p>
    <p>{{ name }}</p>
    <p>{{ dic }}</p>
    <p>{{ li1 }}</p>
    <h2>变量深度查询:变量.索引/key值/方法</h2>
    <p>{{ dic.name }}</p>
    <p>{{ dic.hobbies }}</p>
    <p>{{ li1.0 }}</p>
    <p>{{ li1.1 }}</p>
    <p>{{ dic.hobbies.1 }}</p>
    <h3>方法的调用,对象方法</h3>
    <p>{{ person_list.1.test }}</p>
    <h3>在views,使用直接向变量使用就可调用</h3>
    <p>{{ aaa }}</p>

    3模板之过滤器

    变量之过滤器(是个函数)

    {{age| add:参数}}

    add

    <p>age| add:2 {{ age| add:2 }}</p>

    length

    <p>name|length {{ name|length }}</p>

    default

    <h3>default 简单的判断,当前一个变量为空或False的时候,那么返回default 后面的内容,否则返回原来的内容</h3>
    <p>{{ bol1|default:'假的' }}</p>
    <p>{{ bol2|default:'空的' }}</p>
    <p>{{ bol3|default:'存在' }}</p>

    filesizeformat

    <h3>filesizeformat 将数字装换数据大小</h3>
    <p>file_size|filesizeformat {{ file_size|filesizeformat }}</p>

    date

    <h3>date:"加上格式"来创建内容</h3>
    <p>{{ ctime }}</p>
    <p>{{ ctime|date:'Y-m-d' }}</p>

    slice

    <h3>slice:"开始索引,结束索引" 切片</h3>
    <p>new_name|slice:'2:-1' {{ new_name|slice:'2:-1' }}</p>

    truncatechars

    truncatewords

    <h3>truncatechars 省略字符 ...也算做字符长度</h3>
    <p>new_name|truncatechars:6{{ new_name|truncatechars:6 }}</p>
    <h3>truncatewords 省略单词 ...不算做单词长度</h3>
    <p>new_words|truncatewords:3{{ new_words|truncatewords:3 }}</p>

    safe

    <h3>有后台的连接的字符串的能够</h3>
    <a href="http://www.baidu..com">点击连接</a>
    <p>正常,不用safe {{ a }}</p>
    <p>a|safe {{ a|safe }}</p>

    4.模板之标签

    -语法:{% %} -foo是一个可迭代对象

    for标签循环

    <h2>模板标签主要作用:流程控制或一定程度的处理,可以接受多个参数</h2>
    <h3>for模板标签的基本使用 for li in li1</h3>
    {% for li in li1 %}
        <p>{{ li}}</p>
    {% endfor %}
    <h3>反向循环 for li in li1 reversed </h3>
    {% for li in li1 reversed %}
        <p>{{ li}}</p>
    {% endfor %}

    forloop用查看循环内容的信息

    <h3>forloop只能在for循环中使用,可以获得一系列的数据,包括上级循环的信息,本次循环的位置,是否是开头,是否是结尾等</h3>
    {% for li in li1 %}
        {{ forloop }}
        <p>{{ li}}</p>
    {% endfor %}
    <h3>结果如下:{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}</h3>
    <p>parentloop:父级信息</p>
    <p>counter0:从0计数索引</p>
    <p>counter:从1计数索引</p>
    <p>revcounter:反向从1计数索引</p>
    <p>revcounter0:反向从0计数索引</p>
    <p>first:是第一位?</p>
    <p>last:是最后一位吗?</p>

    empty标签在空循环的情况下执行

    <h3>empty标签:空循环则执行下面的内容,也必须在for循环总才可生效</h3>
    
    {% for foo in bol2 %}
        {{ foo }}
        {% empty %}
        <p>你的循环为空循环</p>
    
    {% endfor %}

    if elif else分支结构

    <h3>if else elif 标签的使用</h3>
    {% if age < 10 %}
        <p>年龄小于10岁</p>
        {% elif age < 20 %}
        <p>年龄在10-20</p>
        {% else %}
        <p>年龄>20</p>
    
    
    {% endif %}

    对于较长的变量可以使用with标签

    <h3>with标签 起别名</h3>
    {% with person_list.1 as a %}
        {{ a }}
    
    {% endwith %}

    5.自定义过滤器和自定义标签

    1、确认在settings文件的设置,

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config',
    ]

    2、在app01文件夹下创建python directory 包(固定名称 templatetags)

    3.在包下创建py文件,用于自定义过滤器和标签

    4.导入

    from django.template import Library
    register = Library()#固定格式

    过滤器

    @register.filter(name ="myadd")
    def my_add(a,b):
        return a+b

    标签

    @register.simple_tag(name='addd')
    def tag_add(a,b,c):
        return a+b+c

    5.模板中使用

    {% load my_tags %}
    <!--导入过滤器和标签-->
    {{ age|myadd:5 }}
    <!--正常过滤器的使用-->
    
    <p>{% addd 1 2 3 %}</p>
    <!--正常标签的使用-->

    7 标签和过滤器的区别: 1 标签可以传多个参数,过滤器最多只能传2个 2 使用过滤器{{ }} 标签使用:{% %} 3 重点:过滤器可以放在if判断后,标签不能放在if判断后

  • 相关阅读:
    Animation(三)
    布局
    AutoCommpleteText
    PHP数组中常用函数
    Animation(四)
    转:JAVA内存映射文件
    Ubuntu安装jdk
    转:Java NIO 详解
    转:长连接与短连接
    Direct or Nondirect ByteBuffer
  • 原文地址:https://www.cnblogs.com/msj513/p/10252304.html
Copyright © 2011-2022 走看看