08_模板templates

模板语言

  • 模板变量
    • 模板变量是由数字、字母、下划线和点组成,不能以下划线开头
    • 使用模板变量:{ { 模板变量名 }}
    • 模板变量解析顺序:
      • { { booktest.btitle }}
        1. 首先把bookt当做一个字典,btitle当做键名,进行取值 book[‘btitle’]
        2. 把book当做一个对象,把btitle当做属性,进行取值,book.btitle
        3. 把book当做一个对象,把btitle当做对象方法,进行取值book.btitle
      • { { book.0 }}
        1. 首先把book当做一个字典,把0当做键名,进行取值 book[‘0’]
        2. 把 book 当做一个列表,把 0 当做下标,进行取值 book[0]
      • 备注:如果解析失败,则会产生内容时用 空字符串 填充模板变量。

模板标签

  • {% 代码段 %}
  • for 标签
    {% for item in 列表 %}
    {% endfor %}
    
    {
          { forloop.counter }} // 表示当前是第几次循环 从 1 开始
    
  • if 标签
    {% if ... %}
    {% elif ... %}
    {% else %}
    {% endif %}
    
  • 比较 逻辑
    • == != < <= > >= and or not
    • 备注:比较符号两边得有空格。
  • 参考网址
    • 内置标签

过滤器

  • 语法
    • 使用管道符号|来使用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。
    • 如果过滤器需要参数,则使用冒号:传递参数
      变量|过滤器:参数
  • 日期date
    { { book.bpub_date|date:'Y-m-j' }}
    备注:date 用于日期类型转化, Y:年 四位 y:年,两位
    m:月,两位 d:日,两位 j:日,1位 H:时,24进制 h:时,12进制 i:分 s:秒
  • default
    date|default:'01' 如果没有值,显示默认值
  • length
    {% if book.btitle|length > 4 %}
    备注:计算字符长度
  • 自定义过滤器
    1. 首先在创建固定包名
      08_模板templates_第1张图片
    2. 在 booktest/templatetags 目录下创建 filters.py 文件,该名字可以随意命名
      #导入Library类
      from django.template import Library
      
      #创建一个Library类对象
      register=Library()
      
      #使用装饰器进行注册
      @register.filter
      #定义求余函数mod,将value对2求余
      def mod(value):
          return value%2 == 0
      
      @register.filter
      def mod_val(num, val):
          return num % val == 0
      
      # 备注:这里面函数参数:有一个或者两个,不能有更多。
      
    3. 在temp_filter.html 中写
      {% load filters %}
      {# 没有参数 #}
      {% if book.id|mod %}
      {# 有一个参数 #}
      {% if book.id|mod_val:3 %}
      
      

注释

  • 单行注释 {# #}
  • 多行注释 {%comment%} {%endcomment%}

模板继承

  • 流程及作用
    08_模板templates_第2张图片
  • 代码
    1. 在 templates/booktest 应用中新建一个base.html
      <head>
      <meta charset="UTF-8">
      <title>{% block title %}这是父模板文件{% endblock title%}title>
      head>
      <body>
      {% block h1 %}
      <h1>父模板h1h1>
      {% endblock h1%}
      {% block h2 %}
      <h1>父模板h2h1>
      {% endblock h2%}
      body>
      
    2. 在 base.html 的同级目录新建一个 child.html 文件
      {% extends 'booktest/base.html' %}  // 引用
      {% block title %}
      子模板文件
      {% endblock title %}
      
      {% block h1 %}
      {
              { block.super }}  # 加载父级
          <h1>子模板h1h1>  # 父级下面写子级
      {% endblock h1 %}
      
      {% block h2 %}
          <h1>子模板h2h1>  # 子级会覆盖父级
      {% endblock h2 %}
      

html 转义

  • html 中转义字符
    小于号 < <
    大于号 > &glt;
    单引号 ' '
    双引号 " "
    与符号 & &
    
  • 使用场景
    1. 在 views 中写 html_escape(request) 函数
      return render(request, 'booktest/html_escape.html', {'content': '

      hello

      '})
    2. 在 html_escape.html 中
      { { content }}
      输出是 h1 标签 经过转义了
    3. 关闭转义
      • { { content|safe }}
        输出字符串
      • 另一种写法
        {% autoescape off %}
        {
                  { content }}
        {% endautoescape %}
        
      • 备注:
        第一种关闭转义是关闭某一行,第二种可以关闭一个块。
        第二种的 autoescape on 是打开转义
  • 备注:
    模板硬编码的字符串默认不会经过转义,如果需要转义,那需要手动进行转义
    {
          { test|default:'<h1>helloh1>'}}
    // 显示h1标签  如果需要显示字符串 需要将 < 改成 &lgt; 其他类似修改才行。
    

你可能感兴趣的:(Django,django,python)