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. 首先在创建固定包名
      在这里插入图片描述
    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%}
模板继承
  • 流程及作用
    在这里插入图片描述
  • 代码
    1. 在 templates/booktest 应用中新建一个base.html
      <head>
      <meta charset="UTF-8">
      <title>{% block title %}这是父模板文件{% endblock title%}</title>
      </head>
      <body>
      {% block h1 %}
      <h1>父模板h1</h1>
      {% endblock h1%}
      {% block h2 %}
      <h1>父模板h2</h1>
      {% endblock h2%}
      </body>
      
    2. 在 base.html 的同级目录新建一个 child.html 文件
      {% extends 'booktest/base.html' %}  // 引用
      {% block title %}
      子模板文件
      {% endblock title %}
      
      {% block h1 %}
      {{ block.super }}  # 加载父级
          <h1>子模板h1</h1>  # 父级下面写子级
      {% endblock h1 %}
      
      {% block h2 %}
          <h1>子模板h2</h1>  # 子级会覆盖父级
      {% endblock h2 %}
      
html 转义
  • html 中转义字符
    小于号 < &lt;
    大于号 > &glt;
    单引号 ' &#39;
    双引号 " &quot;
    与符号 & &amp;
    
  • 使用场景
    1. 在 views 中写 html_escape(request) 函数
      return render(request, 'booktest/html_escape.html', {'content': '<h1>hello</h1>'})
    2. 在 html_escape.html 中
      {{ content }}
      输出是 h1 标签 经过转义了
    3. 关闭转义
      • {{ content|safe }}
        输出字符串
      • 另一种写法
        {% autoescape off %}
        {{ content }}
        {% endautoescape %}
        
      • 备注:
        第一种关闭转义是关闭某一行,第二种可以关闭一个块。
        第二种的 autoescape on 是打开转义
  • 备注:
    模板硬编码的字符串默认不会经过转义,如果需要转义,那需要手动进行转义
    {{ test|default:'<h1>hello</h1>'}}
    // 显示h1标签  如果需要显示字符串 需要将 < 改成 &lgt; 其他类似修改才行。
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值