zoukankan      html  css  js  c++  java
  • Django -- 模板语法

    12.2.9 模板语法
    1. MVC框架和MTV框架
    • MVC框架

      img

      M - model : 模型 -- 与数据库交互,操作数据库

      V - view : 视图 -- 展示页面 HTML

      C - controller : 控制器 -- 调度作用,负责业务逻辑

    • MTV框架

      img

      M - model : 模型 -- 与数据库交互,操作数据库 ( ORM )

      T - template : 视图 -- 模板,HTML

      V - view : 视图 -- 负责业务逻辑

    2. 变量
    {{ 变量名 }}
    {{ 变量名. }}  # 可以通过点的方式获取值
    list.索引(索引值不能为负) 
    dict.key / dict.keys / dict.values / dict.items
    ​
    {{ 类实例化对象 }}
    obj.属性 / obj.方法

    <!-- 注:-->

    当模板系统遇到一个(.)时,会按照如下的顺序去查询:

    1. 在字典中查询 ( 如果字典中有key名字为 'keys',查询的时候先找keys对应的values)

    2. 属性或者方法

    3. 数字索引

    3. 过滤器

    filters 过滤器 -- 用来修改变量的显示结果

    语法: {{ value|filter_name }} / {{ value|filter_name:参数 }}

    <!-- ':' 左右没有空格没有空格没有空格,参数最多有一个 -->

    default -- 提供默认值

    {{ xxx|default:'nothing' }} # 传过来的变量不存在或者为空,使用默认值
    # 注:
         在setting中TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'NOT FOUND',可以替代default的的作用。(优先级高于default)

    slice -- 切片

    {{ name_list|slice:'0:1' }}

    filesizeformat -- 文件大小格式化

    'filesize': 1*1024
    {{ filesize|filesizeformat }}  # 1.0KB

    add -- 表示 +

    {{ num|add:1 }}  # 数字相加
    {{ string|add:'123' }} # 字符串拼接
    {{name_list|add:other_list} # 列表合并

    length -- 返回变量的长度

    {{ value|length }}

    join 使用字符串拼接列表

    {{ name_list|join:'_' }}

    truncatechars -- 按照字符分割.截断的字符串,多余的用'...'表示

    {{ long|truncatechars:'15' }} # 只显示15个字符,三个点也包含在15个字符内

    truncatewords -- 按照单词分割(按照空格)

    {{ long|truncatewords:'6' }}

    date -- 日期格式化

    {{ now|date:'Y-m-d H:i:s' }}
    # settings配置 -- Django中就可以不用日期过滤器
    USE_L10N = False
    DATETIME_FORMAT = 'Y-m-d H:i:s'

    safe -- 告诉django不需要转义,是安全的

    {{ js|safe }} 
    ​
    # 在Python文件中设置
    from django.utils.safestring import mark_safe
    mark_safe('<a href="https://www.baidu.com">跳转</a>')
    {{ a }}

    4. 自定义过滤器
    1. 在app01文件下创建一个templatetags的python包

    2. 在包内创建py文件 -- 自定义名字 ( my_ tags.py )

    3. 在py文件中写入

      from django import template
      register = template.Library()   # regiter不能变,固定写法
    4. 定义函数 + 装饰器

      @register.filter() # 添加装饰器
      def new_upper(value,arg=None):  # arg接收过滤器的参数
          return value.upper()
    5. 在模板中使用

      {% load my_tags %}  # 在模板中导入
      {{ 'abc'|new_upper:dic }} # 函数名就是过滤器名
    5. Tag -- 标签
    1. for

    {%  for i in list %}
        {{ forloop.counter }}
        {{ i }}
    {% endfor %

    for循环可用的一些参数

    Variable(变量)Description(描述)
    {{ forloop.counter }} 当前循环的从1开始的计数
    {{ forloop.counter0 }} 当前循环的从0开始的计数
    {{ forloop.revcounter }} 当前循环的倒叙计数(到1结束)
    {{ forloop.revcounter0 }} 当前循环的倒叙计数(到0结束)
    {{ forloop.first}} 当前循环是否是第一次循环 布尔值
    {{ forloop.last}} 当前循环是否是最后一次循环 布尔值
    {{ forloop.parentloop }} 当前循环父级循环的forloop

    for ... empty

    {% for name in name_list %}
        {{ name }}
    {% empty %}
        空的数据
    {% endfor %}
    1. if

    {% if p1.age < 18 %}
        他还是个宝宝
    {% elif p1.age == 18 %}
        刚成年,可以出家
    {% else %}
        骚老头子坏得很
    {% endif %}

    <!-- 不支持算数运算 ,不支持连续判断 -->

    <!-- if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。 -->

    1. with

    {% with agoni=person_list.1.name age=person_list.1.age   %}
        {{ agoni }} {{ age }}
    {% endwith %}
    1. csrf_token

      这个标签用于跨站请求伪造保护。

      在页面的form表单里面写上{% csrf_token %}

      form表单中有一个隐藏的input标签 name ='csrfmiddlewaretoken'

      <!-- 看下图 -->

    <form action="" method="post">
        {% csrf_token %}
        <input type="text" name="name">
        <button>提交</button>
    </form>

     
  • 相关阅读:
    collections queue、os、datetime,序列化(json和pickle)模块
    re模块和正则
    模块介绍
    迭代器,生成器,生成器表达式,常用内置方法
    交互式shell和非交互式shell的区别
    /usr 的由来及/usr目录结
    Hadoop
    联通、联在中文机器上乱码问题
    正斜杠与反斜杠
    java中static关键字解析
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11432287.html
Copyright © 2011-2022 走看看