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 %}   获取静态文件的别名
原文地址:https://www.cnblogs.com/pythonz/p/10304862.html