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

    模板层

    模版语法重点:
      变量:{{ 变量名 }}
        1 深度查询 用句点符
        2 过滤器
      标签:{{% % }}

    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">

     

     

  • 相关阅读:
    第八届蓝桥杯JavaB---承压计算
    JAVA Double去掉科学计数"E"
    最小公倍数和最大公约数
    蓝桥杯练习系统错题总结—(二)
    蓝桥杯练习系统错题总结—(一)
    今日总结及近期做题规划
    算法习题--电缆分割问题(二分法)
    jQuery 事件方法
    jQuery学习(一)
    jquery中的$(document).ready()
  • 原文地址:https://www.cnblogs.com/zhangpang/p/9974892.html
Copyright © 2011-2022 走看看