Django笔记(七)——Template

Django模版

  • 模版
    • 在Django框架中,模版是可以帮助开发者快速生成呈献给用户页面的工具
    • 模版的设计方式实现了我们MVT中VT的解耦,VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用
    • 模版处理分两个过程:加载渲染
  • 摘要
    • 模版主要有两个部分
      1. HTML静态代码
      2. 动态插入的代码段
    • 模版中的动态代码块段除了做基本的静态填充,还可以实现一些基本运算,转换和逻辑
    • 模版中的变量:
      1. 视图传递给模板的数据
      2. 遵守标识符规则
      3. 语法{{ var }}
      4. 如果变量不存在,则插入空字符串
    • 模块中的点语法:grades grade
      1. 字典查询
      2. 属性或者方法 grade.gname
      3. 索引 grades.0.gname
    • 模版中的小弊端,调用对象的方法,不能传递参数
    • 模版中的标签
      • 语法{% tag %}
      • 作用:
        1. 加载外部传入的变量
        2. 在输出中创建文本
        3. 控制循环或逻辑

if

  • 格式:
    1. {%if 表达式 %} 
        语句
       {% endif %}
    2. {%if 表达式 %}
        语句
       {% else %}
        语句 
       {% endif %}
    3. {%if 表达式 %}
        语句
       {% elif %}
        语句 
       {% endif %}
    

for

  • 格式:
    {% for 变量 in 列表 %}
        语句1
        {% empty %}
        语句2
    {% endfor %}
    
    • 当列表为空或不存在时,执行empty之后的语句
    1. {{ forloop.counter }}表示当前是第几次循环,从1数数
    2. {{ forloop.counter0 }}表示当前是第几次循环,从0数数
    3. {{ forloop.revcounter }}表示当前是第几次循环,倒着数数,到1停
    4. {{ forloop.revcounter0 }}表示当前是第几次循环,倒着数数,到0停
    5. {{ forloop.first }}是否是第一个 布尔值
    6. {{ forloop.last }}是否是最后一个 布尔值

注释

  • 单行注释
    • {# 被注释掉的内容 #}
  • 多行注释
        {# comment #}
            内容
        {# endcomment #}
    

操作

  • 乘除

    • {% widthratio 数 分母 分子 %}
  • 整除

    • {% if num|divisibleby:20 %}
    • 案例:隔行整除
  • ifequal 如果相等

    {% ifequal value1 value2 %}
        语句
    {% endifequal %}
    
  • ifnotequal 如果不相等

  • url: 反向解析

    • {% url’namespace:name’ p1 p2 %}
  • csrf_token用于跨站请求伪造保护的

    • 格式{% csrf_token %}
  • 过滤器:{{ var|过滤器 }}

    • 作用:在变量显示前修改
      • add {{ p.page|add:5 }}
    • 没有减法过滤器,但是加法里可以加载负数
      • {{ p.page|add:-5 }}
    大小写
    lower
        {{ p.pname|lower }}
    upper
    
  • 过滤器可以传递参数,参数需要使用引号引起来,比如join:

      {{ student|join'=' }}
    
    • 默认值:default,格式{{ var|default value }}
    • 如果变量没有被提供或者为False,空,会使用默认值
    • 根据指定格式转换日期为字符串,处理时间的就是针对date进行转换{{ dataVal|date:‘y-m-d’}}
  • HTML转义

    • 将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
      渲染成html:{{ code|safe }}
      {% autoescape off %}
            code
      {% endautoescape %}
      
      不想渲染
      {% autoescape off %}
            code
      {% endautoescape %}
    

模版继承

  • 模版也可以继承
  • 关键字block:挖坑
    • 用来规划布局
{% block xxx %}
code
{% endblock %}
  • extends 继承,写在开头位置

    • {% extends ‘父模版路径’ %}
  • include:加载模版进行渲染

    • 格式:{% include ‘模版文件’ %}
  • 加上static文件夹后记得在settings中添加

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

静态资源

  • 动静分离
  • 创建静态文件夹
  • 在settings中注册STATICFILES_DIRS = []
  • 在模版中使用
    • 先加载静态资源{% load static %}
    • 使用{% static ‘xxx’ %} xxx相对路径
  • 坑点
    • 仅在debug模式可用
    • 以后需要自己单独处理

你可能感兴趣的:(Django笔记)