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判断后

  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/msj513/p/10252304.html
Copyright © 2011-2022 走看看