zoukankan      html  css  js  c++  java
  • day62 Pyhton 框架Django 05

    内容回顾
    
    1.变量
    
    render(request,'模板文件名',{ k1:v1 })
    
    {{  k1 }}
    
    {{  list.0 }}   {{  dict.key }}    {{  dict.keys }}  {{  dict.values }}  
    
    {{ p1 }}   {{ p1.name }}   {{ p1.eat }}
    
    2.过滤器
    
    {{  value|filter }}   {{  value|filter:参数 }}
    
    内置的过滤器:
    
    default    默认值  {{  value|default:’nothing‘}}
    
    title
    
    add   
    
    slice    {{  value|slice:’1:2:2‘}}
    
    length  长度
    
    filesizesformat  
    
    first last  
    
    date   {{  now|date:'Y-m-d  H:i:s' }}
    
    safe   不做转义
    
    3.tags
    
    {%   %}
    
    {% for i in list %}
    
        {{ forloop }}
    
        {{ i }}
    
    {% endfor %}
    
    {% for i in list %}
    
        {{ i }}
    
    {% empty %}
    
        空空如也
    
    {% endfor %}
    
    {% if  条件 %}
    
    {% elif  条件%}
    
    {% else %}
    
    {% endif %}
    
    注意:1.不支持连续判断
    
    1. 不支持算数运算 + - * / 
    
    4.母板和继承 ***
    
    定义母板: base.html
    
    写一个HTML文件,提取多个页面的公共部分,在页面中定义block块。
    
    继承:
    
    写子页面,第一行写 {% extends  'base.html' %},重写block块。
    
    注意的内容:
    
    1. {% extends  'base.html' %} 写在第一行   'base.html'加上引号
    2. 要修改的内容写在block块中
    3. 多写点block块   css  js  
    
    5.组件
    
    组件:一小段写死的HTML代码
    
    使用:{%  include ’nav.html‘ %}
    
    6.csrf_token
    
    将{% csrf_tonken %}写在from表中,name=csrfmiddlewaretoken 
    
    今日内容:
    
    1.装饰器
    
    装饰器:在不改变原函数的代号和调用方法的基础上,给原函数额外增加工功能。
    
        def warpper(func):
            def inner(*args,**kwargs):
                # 原函数执行之前的操作
                ret = func(*args,**kwargs)
                # 原函数执行之后的操作
                return ret
            return inner
        
        @warpper    #   xxx = warpper(xxx)
        def xxx(*args,**kwargs):
            
        xxx(*args,**kwargs)
    
    带参数的装饰器:
    
        def outer(flag):
            def timer(func):
                def inner(*args, **kwargs):
                    ret = func(*args, **kwargs)
                    if flag:
                        print(time.time())
                    return ret
        
                return inner
        
            return timer
    
    多个装饰器装饰一个函数:
    
        def wrapper1(func):
            def inner(*args, **kwargs):
                print('wrapper1 前')
                ret = func(*args, **kwargs)
                print('wrapper1 后')
                return ret
        
            return inner
        
        
        def wrapper2(func):
            def inner(*args, **kwargs):
                print('wrapper2 前')
                ret = func(*args, **kwargs)
                print('wrapper2 后')
                return ret
        
            return inner
        
        
        @wrapper2  # func1 =wrapper2(func1)  wrapper2.inner
        @wrapper1  # func1 =wrapper1(func1)  wrapper1.inner
        def func1():
            print('func1')
    
    装饰器的修复技术
    
        from functools import wraps
        
        def w1(func):
            @wraps(func)
            def inner(*args, **kwargs):
                print('wrapper1 前')
                ret = func(*args, **kwargs)
                print('wrapper1 后')
                return ret
        
            return inner
    
    2.自定义的方法
    
    自定义filter
    
    定义
    
    1. 在app下创建一个名叫templatetags的python包
    2. 在包内创建py文件
    3. 在py文件中写:
           from django import template
           
           register = template.Library()
    4. 写函数
           def add_sb(value, arg):
               return '{}_{}_sb'.format(value, arg)
    5. 给函数加装饰器
           @register.filter
           def add_sb(value, arg):
    
    使用:
    
        {% load my_tags %}
    
        {{ 'alex'|add_sb:'very' }}
    
        {% if 'alex'|add_sb:'big' == 'alex_big_sb' %}
            zhen
        {% endif %}
    
    自定义simple_tag
    
    定义:
    
        前3步同上
    
    1. 写函数(函数参数不受限制),加装饰器
           @register.simple_tag
           def str_join(*args, **kwargs):
               print(args)
               print(kwargs)
               return "-".join(args) + '*'.join(kwargs.values())
    使用:
    
        {% load my_tags %}
        {% str_join 'k1' 'k2' 'k3' k1='v1' k2='v2' %}
    
    自定义inclusion_tag
    
    返回一个动态的代码段
    
    定义:
    
        前3步同上
    
    1. 写函数加装饰器
    
        @register.inclusion_tag('li.html')
        def show_li(num):
            return {'num': range(num)}
    
    1. 写模板(li.html)
    
        <ul>
            {% for foo in num %}
                <li> {{ foo }}</li>
            {% endfor %}
        </ul>
    使用:
    
        {% load my_tags %}
        {% show_li 10 %}
    
    3.静态文件相关
    {% load static %}
    
    <link rel="stylesheet" href="{% static 'plugins/bootstrap-3.3.7/css/bootstrap.css' %}">
    <link rel="stylesheet" href="{% static 'css/dsb.css' %}">
    
    {% get_static_prefix %}   获取静态文件的别名
  • 相关阅读:
    Python爬虫常用之HtmlParser
    Python异常基础
    python开头——文件声明 详解
    if __name__ == '__main__' 详解
    python基础提高演练(名片管理系统的开发)
    python函数基础
    python中的运算符归类
    python中的if判断语句
    python中变量命名的基本规则,标识符和关键字
    python中变量的基本使用
  • 原文地址:https://www.cnblogs.com/pythonz/p/10304862.html
Copyright © 2011-2022 走看看