zoukankan      html  css  js  c++  java
  • Django MTV simple_tag filter inclusion_tag

    Django框架

    模型(Model)、视图(View)和控制器(Controller),具有耦合性低、重用性高、生命周期成本低等优点。

    MVC 框架 --  Model -View -Controller 

    MTV 框架  -- Model(模型)-Template(模板)-View(视图)

      Model(模型):负责业务对象与数据库的对象(ORM)

           Template(模版):负责如何把页面展示给用户

           View(视图):负责业务逻辑,并在适当的时候调用Model和Template

    此外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template

    Django之模板

    Django模板记两种特殊符号:  {{ 变量 } } 和  {% 逻辑相关的操作 %} 

    {{ }}表示变量,在模板渲染的时候替换成值,{% %}表示逻辑相关的操作。

    {{  变量名 }}  变量名由字母数字下划线组成, 点( . )在模板语言中有特殊的含义,用来获取对象的相应属性值.

    1 变量  -- render(request,'模板文件名',{ k1:v1 })
    {{k1}} {{ list.0 }} {{ dict.key }} {{ dict.keys }} {{ dict.values }}
    . 列表 索引 . 字典 键 keys values items 模板系统遇见一个点时:会按照下面顺序去查询:(优先级) -/-
    1 在字典中 2属性或方法 3数字索引 2 过滤器 -- {{ value|filter }} {{ value|filter:参数 }}
    filters
    --过滤器 -- 修改变量的显示结果 {{ value|filter_name:参数 }} 参数最多一个 default 默认 -- 'string_if_invalid':'找不到', 无效字符串 filesizeformat -- 文件大小个格式化 显示效果 最小byte add -- 数字相加 列表拼接 字符串相加 length -- 返回value的长度 slice -- 切片 步长 方向 {{ str|truncatechars:9}}-- 截断 -- date 格式化 import datetime -- 时间{{ now|date:'Y-m-d H:i:s'}} --规定 {{ now }} settings -> DATETIME_FORMAT = 'Y-m-d H:i:s' USE_L10N = False (当前时间正常显示) -------------------------------------------------------------------------------------------
    safe (安全)
    --不做转义 csrf跨站脚本攻击 Django默认做转义 {{ a_html|safe }} {{ js|safe }} --> 告诉Django不做转义,可以实现效果
    不支持 连续判断/数学运算 10>5>1 js//10>5>1 --> false 10>5==1 --> true 
    with
    -- 变量重新赋值
    3 tags 标签
    {%   %} // 
    {% for i in list %}  #for循环
        {{ forloop }}    # counter last first等操作
        {{ i }}
    {% endfor %}
    -------------------
    {% for i in list %}
        {{ i }}
    {% empty %}
        空空如也
    {% endfor %}
    ------------------
    {% if  条件 %}
    {% elif  条件%}
    {% else %}
    {% endif %}
    ------------------
    注意:不支持连续判断
     不支持算数运算 + - * / 
    --------------------------------------------------
    母版
    --减少代码 公用的部分放进去
    分两步:
    1 定义母版 base.html 提取公共部分,页面中定义block块(占位),让子页面进行替换 .
    2 子页面 继承母版 {% extends '母版文件名' %} 写在第一行 /重写block块
    注意: {% extends 'base.html' %}  / 要修改的内容写在block块中 /多写点block块 css-js
    母版文件名加引号 模板中写多个block 预留css js 样式位置

    --------------组件 一小段写死的html代码--------------
    使用 {% include '组件.html' %}
    csrf_token   ---/CSRF(Cross-site request forgery)跨站请求伪造
    {% csrf_token %}  --> form表单中   

     装饰器  -- 在不改变原函数的代号和调用方法的基础上,给原函数额外增加功能。

    **** 以下是3种自定义的方法 ****
    -- 在app 文件夹下创建 一个名为 templatetags 的 python package包,包中创建my_tags.py文档
    -- 以下为my_tags.py 中的代码内容 --
    from django import template
    register = template.Library()   # register固定的写法
    # 写函数
    def add_sb(value, arg):
        return '{}_{}_sb'.format(value, arg)
    
    @register.filter              # 函数加装饰器
    def add_sb(value, arg):     # 最多两个参数
        print(value, arg)
        return '{}_{}_sb'.format(value, arg)
    
    @register.simple_tag
    def str_join(*args, **kwargs):   # 可接受多个参数
        print(args)
        print(kwargs)
        return "-".join(args) + '*'.join(kwargs.values())
    
    @register.inclusion_tag('li.html')  #动态代码段
    def show_li(num):
        return {'num': range(num)}    
    
    -------------- 以下是在 html 文档中使用 --------------
    {% load my_tags%}   # 加载自定义标签
    {{ 'zc'|add_sb:'very'}}
    
    {% if 'alex'|add_sb:'big' == 'alex_big_sb' %}
        zhen
    {% endif %}
    -- -- -- -- 以下 simple_tag (接收多个参数) -- -- -- -- -- --

      {% load my_tags %}
      {% str_join 'k1' 'k2' 'k3' k1='v1' k2='v2' %}

      -- -- -- -- -- --  -- -- -- -- -- -- -- -- -- -- 

     写模板 li.html 

      <ul>
        {% for foo in num %}
          <li> {{ foo }}</li>
        {% endfor %}
      </ul>

    -- 以下这两行代码要写在渲染页面上  inclusion_tag   --

    {% load my_tags %}
    {% show_li 10 %}

    静态文件相关

    -- -- 在母版 base.html 页面 -- -- -- 
    {% 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 %}
  • 相关阅读:
    禁止微信内置浏览器调整字体大小
    常用EXE文件反编译工具【转】
    C++发送HTTP请求---亲测可行(转)
    Cesium简介 [转]
    WebGL可视化地球和地图引擎:Cesium.js
    HTML5 canvas图形库 RGraph【转】
    [GitHub开源]基于HTML5实现的轻量级Google Earth三维地图引擎,带你畅游世界 【转】
    OpenGL实现多层绘制(Layered Rendering) [转]
    深度剖析OpenGL ES中的多线程和多窗口渲染技术
    OOP几大原则【转】
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10301653.html
Copyright © 2011-2022 走看看