Django学习9:模板(templates)

来源:互联网 发布:我的世界如何添加端口 编辑:程序博客网 时间:2024/06/01 15:09

模板

概述

模板由两部分组成:HTML代码 + 逻辑控制代码(变量 + 标签 + 过滤器)

作用:很便利的生成HTML页面

优点:实现了业务逻辑与显示内容的分离,一个视图可以任意使用模板,一个模板可以供多个视图使用

模板处理:

  1. 加载:根据制定的规则找到对应的模板,然后预处理,编译后存在内存中
  2. 渲染:用给定的context内容数据填充加载的内容,并生产新的HTML页面(字符串)

定义模板

变量:

  1. 语法:{{ var }}
  2. 注意:变量名要遵循标识符规则,如果使用的变量不存在,则插入空字符串
  3. 示例:
    Nice day
    {{ sentence }}
  4. 在模板中使用 . 语法访问对象的属性
  5. 在模板中调用对象的方法:不能传递参数
    {{ stu.say }} # 这里的say是个无参函数

标签:

  1. 语法:{% tag %}
  2. 作用:控制逻辑
  3. if:判断
    {% if num %}
    Nice
    {% endif %}
  4. for:循环

      {% for stu in students %}
    • stu.sname
    • {% empty %}
    • 无数据
    • {% endfor %}
  5. comment:注释
    {% comment %}
    Hi
    Hello
    {% endcomment %}
  6. ifequal、ifnotequal:等于、不等于
    {% ifequal num 10 %}
    Hi
    {% endifequal %}
  7. include:包含
    # 作用:加载模板并以标签内的参数渲染
    # 格式:{% include ‘模板目录’ with 参数1 = 参数2 %}
  8. url:反向解析
    {% url ‘namespace:name’ p1 p2 %}
  9. csrf_token:跨站请求伪造保护

    {% csrf_token %} # 启动post请求功能
    账号:

  10. block、extends:模板继承
  11. autoescapr:用于HTML转义

过滤器:

  1. 语法:{{ 变量 | 过滤器 }}
  2. 作用:在变量被显示之前修改它
  3. lower:转小写
  4. upper:转大写
  5. join:
    # 格式:list | join:参数
    # 示例:{{ str | join:’#’}}
  6. default:如果使用的变量不存在,或者为空、False,则使用默认值,否则使用变量的值
    # 格式:var | default:参数
    # 示例:{{ num | default:’这是个False哟~’}}
  7. date:根据给定格式对一个变量进行格式化显示,格式:var | date:’Y-m-d’
  8. escape:开启HTML转义
  9. 加减乘除
    {{ num }}
    {{ num | add:5}}
    {{ num | add:-5}}
    {% widthratio num 1 5 %}
    {% widthratio num 5 1 %}
  10. 注释
    # 单行注释:
    {# 一行的内容 #}

    # 多行注释(可以包含任何代码): {% comment %}    ...  {% endcomment %}

    模板继承:

  11. 作用:可以减少页面内容的重复定义,实现页面内容的重用
  12. block标签:在父模板中预留位置,让子模版填充
  13. extends标签:继承,写在模板文件的第一行
  14. 示例:
# 定义模板<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>{{ title }}</title></head><body>    <div id="box">        {% block main%}        {% endblock main %}    </div>    <hr>    <div id="temp">        {% block temp %}        {% endblock temp %}    </div></body></html># 定义子模版{% extends 'base.html' %}{% block main %}    <h1>Nice nice</h1>{% endblock main %}{% block temp %}    <h1>Lalala</h1>{% endblock temp %}

HTML转义:

  1. 问题:用户输入script标签,会当成js代码来处理,对页面造成影响
  2. 默认是开启自动转义,所接收的内容当成字符串处理
  3. 关闭转义
    {% autoescape off %}
    {{ code }}
    {% endescape %}
  4. 注意:如果在父模板中关闭了自动转义,在其子模版中也是关闭的

CSRF:

模拟用户的cookie发起请求(暂未说详细)

验证码:

  1. 作用:在用户注册、登陆页面为了防止暴力请求,减轻服务器的压力;防止CSRF的方法