• 模板层


    1 变量 过滤器
    2 标签

    filter
    {{}}
        1 变量
            1 句点符,深度查询 
            2 可以点到方法,不要加括号,只能是无参的方法 
            3 xss跨站脚本攻击: 比如提交评论<script>alert('dsb')</script> 存到数据库 响应到html 浏览器解释 就会弹窗 如果for循环一千次或者多次 页面就崩了
             这就是xss攻击  所以一定要处理
            如果不要django处理(比如:<用&gt; 替换) 
            就要显示标签可以这样处理:
                1 ss3=mark_safe(ss3)        from django.utils.safestring import mark_safe                 在views中
                2 <p>safe过滤器:  {{ ss3|safe }}</p>                                                       html中
           3 @register.simple_tag(is_safe=False)  默认是true,防止xss攻击,显示字符串。false浏览器直接解释标签 自定义标签时设置false
    2 过滤器 冒号后不能加空格 now是第一个参数,冒号后面是第二个参数 <p>date过滤器 {{ now|date:'Y-m-d:H:i:s' }}</p> <p>date过滤器 {{ now|date }}</p> 如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如: <p>default过滤器 {{ ss2|default:'字符串没有值' }}</p> <p>default过滤器 {{ ll3|default:'列表没有值' }}</p> 返回值的长度。它对字符串和列表都起作用 <p>length过滤器 {{ ll2|length }}</p> 将值格式化为一个 “人类可读的” 文件尺寸 单位是B (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如: <p>filesizeformat过滤器 {{ file|filesizeformat }}</p> <p>filesizeformat过滤器 {{ 1024|filesizeformat }}</p> 切片操作 <p>slice过滤器 {{ 'lqzisbig'|slice:'1:9' }}</p> 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾 带空格的字符串不算点的数量 不带空格的字符串算点的数量 <p>truncatechars过滤器 {{ 'lqzisbigdddddddeee'|truncatechars:9 }}</p> <p>truncatewords过滤器: {{ 'lqz is big and egon is small'|truncatewords:3 }}</p xss攻击:跨站脚本攻击 1 在html中处理 <p>safe过滤器: {{ ss3|safe }}</p> 2 {#也可以在视图函数里处理#} from django.utils.safestring import mark_safe ss3=mark_safe(ss3) 俩参数可以传字符串和数字,具体详见源码 <p>add过滤器: {{ 12|add:"3" }}</p> <p>add过滤器: {{ 'eee'|add:"3rrr" }}</p> tag {% %} for :forloop {%for i in ll%} #必须再for循环里使用 {{forloop}} 字典 # {% empty%}} 判断是否为空 {% endfor%} if if语句支持 andor、==、>、<、!=、<=、>=、innot inisis not判断。 {%if 条件%} {% endif%} {% with aa=dic.name%} 起别名 {{aa}} {%endwith%}
    from django import template
    
    register=template.Library()
    
    @register.filter
    def myadd(value,arg):
        if type(value) == type(arg) == int or type(value) == type(arg) == str:
            return value+arg
        elif type(value) == int and type(arg) == str:
            return str(value) + arg
        elif type(value) == str and type(arg) == int:
            return value + str(arg)
        else:
            return '参数只能是数字或字符串'
    
    @register.simple_tag
    def myfactorial(n):
        if type(n) != int:
            # raise ValueError
            return 'ValueError'
        if n == 0 or n == 1:
            return 1
        else:
            return (n*myfactorial(n-1))
    自定义标签
    from django.shortcuts import render
    
    from django.utils.safestring import mark_safe
    # Create your views here.
    
    class Person:
        def __init__(self,name):
            self.name = name
    
        @classmethod
        def class_test(cls):
            print('class method')
            return 'class method'
        def test(self):
            print('method')
            return self.name
    
        # def __str__(self):
        #     return self.name
    
    
    def index(request):
    
        n1 = 1
        n2 = 2
        n3 = 5
        s1='a'
        s2='b'
    
        ss='lqz is big'
        i=20
        ll=['lqz',18,[1,2,[2,3]]]
        ll4=[[1,2,3],[2,3,4],[1,2,9]]
        dic={'name':'lqz','age':18,'t':[1,2,[2,3]]}
        b=True
        lqz=Person('lqz')
        egon=Person('egon')
        xiaohou=Person('xiaohou')
        monkey=Person('monkey')
        ll2=[lqz,egon,xiaohou,monkey]
        dic2={'lqz':lqz,'egon':egon}
        # print(lqz.class_test())
        # print(dic['name'].upper)
        ll3=[]
        ss2=''
        ss3='<a href="https://www.baidu.com">点我</a>'
        # ss3=mark_safe(ss3)
        import datetime
        now=datetime.datetime.now()
        file=1024*1024*1024
    
    
        return render(request,'index.html',locals())
        # return render(request,'index.html',{'ss':ss,})  建议使用这种
    视图函数
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        {% load static %}
        <link rel="stylesheet" href="{% static 'mycss.css' %}">
    {#    <link rel="stylesheet" href="/staticaa/mycss.css">#}
    </head>
    <body>
    <div>静态文件写活</div>
    
    <hr>
    
    {% load my_tags %}
    {#{{ '12'|add }}#}
    <p>{{ n1|myadd:n2 }}</p>
    <p>{{ s1|myadd:s2 }}</p>
    <p>{{ s1|myadd:n2 }}</p>
    <p>{{ '@#@'|myadd:33 }}</p>
    {% myfactorial 'a' %}
    
    
    自定义的过滤器,可以放在if判断里,
    自定义的标签,不能放在if判断里条件里
    <hr>
    
    <h3>变量</h3>
    <p>字符串:{{ ss }}</p>
    <p>数字:{{ i }}</p>
    <p>列表:{{ ll }}</p>
    <h3>句点符,做深度查询</h3>
    <p>列表第2个值:{{ ll.2.2.0}}</p>
    <p>布尔类型:{{ b}}</p>
    <p>字典:{{ dic }}</p>
    <p>字典取值:{{ dic.age }}</p>
    <p>字典取值:{{ dic.t.2.1 }}</p>
    <p>对象:{{ lqz }}</p>
    <p>对象取值:{{ lqz.name }}</p>
    <h2>对象方法,不要加括号</h2>
    <p>对象方法:{{ lqz.test }}</p>
    <p>类方法:{{ lqz.class_test }}</p>
    <h3>注释:前端看不到,django给处理了</h3>
    {#<p>类方法:{{ Person}}</p>#}
    
    <p>列表对象{{ ll2 }}</p>
    <p>列表对象取值{{ ll2.1 }}</p>
    <p>列表对象取值,在取值{{ ll2.1.name }}</p>
    
    <p>对象字典{{ dic2 }}</p>
    <p>对象字典取值{{ dic2.egon.name }}</p>
    <p>空列表的情况就是一个空列表{{ ll3 }}</p>
    <p>空字符串的情况    直接替换成空{{ ss2 }}</p>
    
    <h3>xss 跨站脚本攻击
        django为了解决这种攻击行为所以对标签进行了处理 特殊符号替换 浏览器不能直接解释标签只能原样输出
        ,如果想直接让浏览器解释这个标签 需要用 mark_safe()函数 在views中 告诉django不要处理</h3>
    <p>a标签 {{ ss3 }}</p>
    <h4>字典:{{ ss.upper }}</h4>
    <h4>字典:{{ dic.name.upper }}</h4>
    &lt
    
    {#<script>alert('dsb')</script>#}
    {# xss:比如提交评论 存到数据库 响应到html 浏览器解释 就会弹窗 这就是xss攻击  所以一定要处理 #}
    
    <h2>过滤器</h2>
    冒号后不能加空格 now是第一个参数,冒号后面是第二个参数
    <p>date过滤器 {{ now|date:'Y-m-d:H:i:s' }}</p>
    <p>date过滤器 {{ now|date }}</p>
    <hr>
    如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:
    <p>default过滤器  {{ ss2|default:'字符串没有值' }}</p>
    <p>default过滤器  {{ ll3|default:'列表没有值' }}</p>
    <hr>
    返回值的长度。它对字符串和列表都起作用
    <p>length过滤器  {{ ll2|length }}</p>
    <hr>
    将值格式化为一个 “人类可读的” 文件尺寸 单位是B(例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:
    <p>filesizeformat过滤器  {{ file|filesizeformat }}</p>
    <p>filesizeformat过滤器  {{ 1024|filesizeformat }}</p>
    <hr>
    切片操作
    <p>slice过滤器  {{ 'lqzisbig'|slice:'1:4' }}</p>
    <hr>
    如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾
    带空格的字符串不算点的数量
    不带空格的字符串算点的数量
    <p>truncatechars过滤器  {{ 'lqzisbigdddddddeee'|truncatechars:9 }}</p>
    <p>truncatewords过滤器:  {{ 'lqz is big and egon is small'|truncatewords:3 }}</p>
    <hr>
    
    <p>safe过滤器:  {{ ss3|safe }}</p>
    {#可以在视图函数里处理 ss3=mark_safe(ss3)#}
    <p>{{ ss3 }}</p>
    <hr>
    俩参数只能传字符串和数字 相加,具体详见源码
    <p>add过滤器:  {{ 12|add:"3" }}</p>
    <p>add过滤器:  {{ 'eee'|add:"3rrr" }}</p>
    
    <hr>
    <h1>模板语法之标签</h1>
    
    {% for foo in ll %}
        <p>{{ forloop }}</p>
        <p>{{ forloop.counter }}</p>
        <p>{{ forloop.counter0 }}</p>
        <p>{{ forloop.revcounter }}</p>
        <p>{{ forloop.revcounter0 }}</p>
        <p>{{ forloop.first }}</p>
        <p>{{ forloop.last }}</p>
        {% if forloop.first %}
            lqz is big
            {% elif forloop.last %}
            俩人都小
            {% else %}
            egon is small
    
        {% endif %}
    
        <p>{{ foo }}</p>
    
    {% endfor %}
    <hr>
    {% for foo in ll %}
        <p>{{ foo }}</p>
        {% empty %}
         没有值
    {% endfor %}
    <hr>
    {% for foo in ll3 %}
        <p>{{ foo }}</p>
    
        {% empty %}
        一定要放在for循环中
         没有值
    {% endfor %}
    <hr>
    
    {% for foo in ll4 %}
        {% for i in foo %}
            <p>{{ forloop }}</p>
           <p>{{ forloop.parentloop }}</p>
    
    
        {% endfor %}
    
    {% endfor %}
    <hr>
    
    if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
    
    {% with ttttt=dic.name %}
        相当于重新赋值
        <p>{{ dic.name }}</p>
        <p>{{ ttttt }}</p>
        <p>{{ ttttt }}</p>
        <p>{{ ttttt }}</p>
    
    
    {% endwith %}
    
    <hr>
    
    <hr>
    </body>
    </html>
    模板层

    4 静态文件动态引入

    静态文件(static)引入的三种方式: 关注的文件:html和settings
    核心:如果STATIC_URL = '/static/'--- >STATIC_URL = '/staticaaa/'     改变则动态引入的两种方式自动改变
            一:
            <link rel="stylesheet" href="/static/dd/ssmycss.css">
        二:
            {% load static %}
            <link rel="stylesheet" href="{% static 'dd/ss/mycss.css' %}">
            {#    返回值:/static/dd/ss/mycss.css#}
        三:
            <link rel="stylesheet" href="{% get_static_prefix %}dd/ss/mycss.css">

    5 模板导入和继承

    模板导入和继承  html之间的问题
        模板导入: 通用部分的html代码解决复用性
         1 把公共部分,放到html里,比如叫 left.html
         2 想在哪里用 {% include 'left.html' %}  index.html
        母版继承: 修改覆盖或者追加母版
            1  写一个母版 base.html
            2 要更改的地方(    )
            {% block base %}
                母版的盒子里也可以写东西
            {% endblock %}
            3 调用:
                3.1 写在第一行 {%extends 'base.html' %}
                3.2         {% block base %}
                
                            自己的东西
                            
                            {% endblock my_head%}
                3.3 还想用母版里的内容({{block.super}} 放在那,原来母版里的东西,就会渲染在哪)
                        {% block base %}
                            {{block.super}}
                            自己的东西                        
                        {% endblock my_head%}
                3.4 如过不继承盒子,它会用原来的内容,如果继承了,没写自己的东西,它会空白
                3.5 盒子再继承时,跟顺序无关
    <div>
        <div class="panel panel-danger">
            <div class="panel-body">
                Panel content
            </div>
            <div class="panel-footer">Panel footer</div>
        </div>
    
        <div class="panel panel-success">
            <div class="panel-body">
                Panel content
            </div>
            <div class="panel-footer">Panel footer</div>
        </div>
        <div class="panel panel-primary">
            <div class="panel-body">
                Panel content
            </div>
            <div class="panel-footer">Panel footer</div>
        </div>
    </div>
    left.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
        {% load static %}
        <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
        <style>
            .head {
                height: 30px;
                background-color: pink;
            }
        </style>
    </head>
    <body>
    <div class="head"></div>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
                {% include 'left.html' %}
            </div>
    
            <div class="col-md-9">
            </div>
        </div>
    </div>
    </body>
    </html>
    index.html

    继承

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        {% block myhead %}
            <title>index</title>
        {% endblock %}
    
        {% block top %}
            {% load static %}
            <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
        {% endblock %}
    
        <style>
            .head {
                height: 30px;
                background-color: pink;
            }
        </style>
    </head>
    <body>
    <div class="head"></div>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-3">
                {% block left %}
    
                {% endblock %}
            </div>
    
            <div class="col-md-9">
                {% block right %}
                    <h1>right</h1>
                {% endblock %}
            </div>
        </div>
    </div>
    </body>
    </html>
    base.html
    {% extends 'base.html' %}
    
    {% block myhead %}
        <title>order</title>
        {{ block.super }}
    
    {% endblock myhead %}
    
    {% block top %}
        {% load static %}
        <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.min.css">
    {% endblock top %}
    
    {% block left %}
        <h1>left</h1>
        {% include 'left.html' %}
    {% endblock left %}
    
    {% block right %}
        <h1>aaaaaaaaaaaaaaaaa</h1>
        {{ block.super }}
        <h1>adfasdfasd</h1>
    
        {% load mytags %}
        {% my_inclusion 10 %}
    {% endblock %}
    order.html

     3 自定义标签,过滤器,inclusion_tag


    自定义过滤器 1 先去setting里面把app名字配置上 2 再app目录下创建一个templatetags模块 3 写py文件(my_test.py) 4 from django import template 5 register=template.Library() 6 写函数 addstr(用register.filter()装饰) 7 模板: 8 {% load my_test %} 9 {{'lqz'|addstr:'isbig' }} #最多只能传两个参数 自定义标签: settings app01-templatetags-my_test.py 1 先去setting里面把app名字配置上 (除非新加的一般都是弄好的) 2 再app目录下创建一个templatetags模块 3 写py文件(my_test.py) 4 from django import template 5 register=template.Library() 6 写函数 my_sum@register.simple_tag(name='yy')装饰) @register.simple_tag(name='yy') def my_sum(x,y,z,i): return x+y+z+i 7 模板: 8 {% load my_test %} 9 {% yy 12 34 56 78 %} #以空格做分割,传参数 @register.simple_tag(name='yy') @register.simple_tag(is_safe=False) 默认是true,防止xss攻击,显示字符串。false浏览器直接解释标签 自定义的过滤器,可以放在if判断里, 自定义的标签,不能放在if判断里条件里 练习: 自定义一个标签(输入一个值,计算出阶乘,显示再页面) 自定义一个过滤器 (输入两个参数,做累加,支持数字,字符串(如果一个数字,一个字符串,强行相加))


    自定义 inclusion_tag 返回字典(其值必须是可迭代对象),数据给指定的html使用,生成的html在html中和一般自定义标签一样使用 1 先去setting里面把app名字配置上 2 再app目录下创建一个templatetags模块 3 写py文件(mytags.py) 4 from django import template 5 register=template.Library() 6 @register.inclusion_tag('test.html') def my_inclusion(n): data=[] for i in range(n): data.append('第%s行'%i) return {'data':data} 7 写test.html页面
    <ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %} </ul> 8 {% load my_test %} #order.html引用 9 {% my_inclusion 10 %} 它会返回html的页面
    from django import template
    
    register=template.Library()
    
    @register.inclusion_tag('test.html')
    def my_inclusion(n):
        data = []
        for i in range(n):
            data.append('第%s行' %i)
        return {'data':data}
    mytags.py
    <ul>
        {% for foo in data %}
            <li>{{ foo }}</li>
        {% endfor %}
    
    </ul>
    test.html
    {% extends 'base.html' %}
    
    {% block myhead %}
        <title>order</title>
        {{ block.super }}
    
    {% endblock myhead %}
    
    {% block top %}
        {% load static %}
        <link rel="stylesheet" href="{% get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.min.css">
    {% endblock top %}
    
    {% block left %}
        <h1>left</h1>
        {% include 'left.html' %}
    {% endblock left %}
    
    {% block right %}
        <h1>aaaaaaaaaaaaaaaaa</h1>
        {{ block.super }}
        <h1>adfasdfasd</h1>
    
        {% load mytags %}
        {% my_inclusion 10 %}
    {% endblock %}
    order.html
  • 相关阅读:
    node lesson2
    二级联动(list对象中存list对象)
    Spring的注解@Qualifier注解
    @Service(value = "aaaa") 和@Service( "a")的区别
    oracle分页
    Oracle数据导入导出imp/exp
    oracle截取某个字符前面的字符串
    oracle中截取某个字符前面和后面的值
    解决Eclipse启动报错Failed to create the Java Virtual Machine
    成功秘诀就是拿出勇气和坚定的信念去做自己喜欢并且擅长的事情
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9601168.html
Copyright © 2020-2023  润新知