03模板变量及模板过滤器

03模板变量及模板过滤器

1.模板路径的查找

  • 查找顺序(两种位置)

    1. 首先查找 settings.py 中的TEMPLATES的'DIRS'

    2. 当'APP' = True时 会去INSTALLED_APPS列表中查找 app目录下的模板

  • 模板的位置(两种方案)

    • 当大项目时,集中部署时,模板的位置在项目根目录下

    • 当app可以复用的时候,给多个项目使用,模板的位置在app目录下

  • 方案1时,为什么在templates文件夹下还要建立app文件夹?

    • 按照顺序查找,找到一个符合的模板就返回

    • 所以为了防止不同app中同名模板的覆盖

       

2.模板变量

  • 静态页面,动态页面

    • 不随时间改变,不随客户端不同而改变的页面为静态页面,不存在交互

    • 随着时间改变,随着客户端改变,访问者改变而改变的页面为动态页面,存在交互

  • 模板变量:在render函数中,可以传递一个变量,将变量的值渲染到模板中(名不能用下划线开头)

    • 在render()中加一个参数context={},传递一个字典,键为模板中引用的名字 ,值为变量名

    • 例如在render函数中传递context={'now':now}

    • 则在html模板中则可以引用{{now}},这里的now指的是context中的'now'

    • 对应某个app的某个方法中定义的now变量

  • 模板变量的解析规则

    • 计算变量,将其替换为结果

    • 遇到点(.)的时候,按以下顺序查找

      1. 字典键值查找

      2. 属性或方法查找

      3. 数字索引查找

    • 如果变量为可调用的(函数),则调用它的时候不带参数,调用的结果成为模板的值

    • 渲染失败,则返回空

3.模板过滤器 filter 对模板变量进行操作

  • 常用模板过滤器 语法{{变量 | 过滤器:参数|过滤器:参数|······}},

    • add: 将变量与值相加 首先尝试整数相加,失败后尝试其他可能(字符串拼接,列表拼接)

    • capfirst 首字母大写,值的首位不是字母无效

    • date: 日期格式化,按照格式填充日期 'Y年m月d日 H时i分s秒'

      • Y:四位数的年 如1999

      • y:两位数的年 如99

      • m:两位数的月 如01,09

      • n:一位数的月 如 1,9,12

      • d:两位数的日 如01,09,31

      • j:一位数的日 如1,9,31

      • g:12小时制的一位数的小时 如1 ,9,12

      • G:24小时制的一位数的小时 如0 ,8,23

      • h:12小时制的两位数的小时 如01,09,12

      • H:24小时制的两位数的小时 如01,08,23

      • i: 分钟 00 -59

      • s: 秒 00-59

    • time 时间格式化,按照格式填充时间,只有时分秒

    • default: 变量渲染失败时,返回default的参数,注意:变量本来就返回''时,也会返回参数

    • first 返回列表的第一个元素

    • last 返回列表的最后一个元素

    • slice:' : : ' 返回列表的切片

    • join:' ' 字符串拼接

    • floatformat:小数点位数 浮点数格式化,不指定则默认保留一位小数

    • length 返回字符串或列表的长度

    • length_is:number 返回布尔值,列表的长度是否为number

    • lower 字符串全部小写

    • upper 字符串全部大写

    • title 所有空格隔开d的单词首字母大写

    • safe 关闭模板引擎对变量(html,css,js)的自动转义,使得标签有效

  • xss (跨域脚本攻击)

    • 为了防止变量作为标签语言(html,css,js)对网页进行跨域脚本攻击,django模板引擎默认将变量为这些内容的,在渲染时将标签<>转义回&lt,&gt,防止其对模板产生作用

    • 利用safe过滤器,可以将信任的变量通过safe过滤器,取消模板引擎的转义

4.静态文件 (css,js,images)

  1. 路径配置

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

  2. 静态文件的引入

    1. 硬编码 通过STATIC_URL

    2. 模板标签动态引入,此时无论STATIC_URL为什么都不影响,可以隐藏路径

      1. html文档开头加载static文件夹: {% load static %}

      2. link标签的href="{% static '相对路径' %}"

猜你喜欢

转载自www.cnblogs.com/zonexxlcode/p/11388901.html