- 前面用到的模板语言
https://www.cnblogs.com/liwenzhou/p/7931828.html
{{ name }} => 变量
# for循环判断
{% for i in book_list %}
{{ forloop.counter }}
...
{% endfor %}
#if...else判断
{% if 10>5 %}
...
{% else %}
...
{% endif %}
#判断模块
{% if name in name_list %}
...
{% endif %}
{{ }} 变量相关 {% %}逻辑相关
点(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:
字典查询(Dictionary lookup)
属性或方法查询(Attribute or method lookup)
数字索引查询(Numeric index lookup)
⚠️
1. 如果计算结果的值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
2. 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为'' (空字符串) 。
- 过滤器
在Django的模板语言中,通过使用 过滤器 来改变变量的显示。
过滤器的语法: {{ value|filter_name:参数 }}
使用管道符"|"来应用过滤器。
例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。
常见的过滤器
# 如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
{{ value | default : "test"}}
#返回值的长度,作用于字符串和列表。
{{ value|length }}
# 显示日期
from datetime import datetime
now = datetime.now()
{{ now|date:"Y-m-d H:i:s"}}
# 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。参数:截断的字符数
{{ value|truncatechars:9}}
自定义的过滤器
step1: 新建对应的filter目录 => templatetags
app01/
__init__.py
models.py
templatetags/ # 在app01下面新建一个package package
__init__.py
app01_filters.py # 建一个存放自定义filter的文件
views.py
step 2: 编写过滤器的逻辑
# encoding: utf-8
from django import template
register = template.Library()
# 前面两行基本配置文件
# 模板语言的注册
@register.filter(name="sb")
def add_sb(arg):
return "{} sb.".format(arg)
# 含有两个参数的模板
# 要传入三个参数或者更多见Django静态文件部分
@register.filter(name="addstr" )
def add_str(arg, arg2):
return "{} {}".format(arg,arg2)
step 3: 模板调用
模板的调用 => 调用的时候注意,服务器需要重新启动
{% load myfilter %}
{{ a|sb }}
# 主要中间没有空格
{{ a|addstr:"afsdfsd"}}
- tags标签
# 当前循环的索引值(从1开始)
forloop.counter
#当前循环是不是第一次循环(布尔值)
forloop.first
# 当前循环是不是最后一次循环(布尔值)
forloop.last