模板语言
- 模板变量
- 模板变量是由数字、字母、下划线和点组成,不能以下划线开头
- 使用模板变量:{{ 模板变量名 }}
- 模板变量解析顺序:
- {{ booktest.btitle }}
- 首先把bookt当做一个字典,btitle当做键名,进行取值 book[‘btitle’]
- 把book当做一个对象,把btitle当做属性,进行取值,book.btitle
- 把book当做一个对象,把btitle当做对象方法,进行取值book.btitle
- {{ book.0 }}
- 首先把book当做一个字典,把0当做键名,进行取值 book[‘0’]
- 把 book 当做一个列表,把 0 当做下标,进行取值 book[0]
- 备注:如果解析失败,则会产生内容时用 空字符串 填充模板变量。
- {{ booktest.btitle }}
模板标签
- {% 代码段 %}
- 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 %}
备注:计算字符长度 - 自定义过滤器
- 首先在创建固定包名
- 在 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 # 备注:这里面函数参数:有一个或者两个,不能有更多。
- 在temp_filter.html 中写
{% load filters %} {# 没有参数 #} {% if book.id|mod %} {# 有一个参数 #} {% if book.id|mod_val:3 %}
- 首先在创建固定包名
注释
- 单行注释
{# #}
- 多行注释
{%comment%}
{%endcomment%}
模板继承
- 流程及作用
- 代码
- 在 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>
- 在 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 %}
- 在 templates/booktest 应用中新建一个base.html
html 转义
- html 中转义字符
小于号 < < 大于号 > &glt; 单引号 ' ' 双引号 " " 与符号 & &
- 使用场景
- 在 views 中写 html_escape(request) 函数
return render(request, 'booktest/html_escape.html', {'content': '<h1>hello</h1>'})
- 在 html_escape.html 中
{{ content }}
输出是 h1 标签 经过转义了 - 关闭转义
{{ content|safe }}
输出字符串- 另一种写法
{% autoescape off %} {{ content }} {% endautoescape %}
- 备注:
第一种关闭转义是关闭某一行,第二种可以关闭一个块。
第二种的autoescape on
是打开转义
- 在 views 中写 html_escape(request) 函数
- 备注:
模板硬编码的字符串默认不会经过转义,如果需要转义,那需要手动进行转义{{ test|default:'<h1>hello</h1>'}} // 显示h1标签 如果需要显示字符串 需要将 < 改成 &lgt; 其他类似修改才行。