篇首语:本文由小编为大家整理,主要介绍了Django -- 模板语法相关的知识,希望对你有一定的参考价值。
12.2.9 模板语法
1. MVC框架和MTV框架
MVC框架
M - model : 模型 -- 与数据库交互,操作数据库
V - view : 视图 -- 展示页面 html
C - controller : 控制器 -- 调度作用,负责业务逻辑
MTV框架
M - model : 模型 -- 与数据库交互,操作数据库 ( ORM )
T - template : 视图 -- 模板,HTML
V - view : 视图 -- 负责业务逻辑
2. 变量
变量名 变量名. # 可以通过点的方式获取值list.索引(索引值不能为负) dict.key / dict.keys / dict.values / dict.items? 类实例化对象 obj.属性 / obj.方法
当模板系统遇到一个(.)时,会按照如下的顺序去查询:
在字典中查询 ( 如果字典中有key名字为 "keys",查询的时候先找keys对应的values)
属性或者方法
数字索引
3. 过滤器
filters 过滤器 -- 用来修改变量的显示结果
语法: value|filter_name / value|filter_name:参数
default -- 提供默认值
xxx|default:"nothing" # 传过来的变量不存在或者为空,使用默认值# 注: 在setting中TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:"NOT FOUND",可以替代default的的作用。(优先级高于default)
slice -- 切片
name_list|slice:"0:1"
filesizeformat -- 文件大小格式化
"filesize": 1*1024 filesize|filesizeformat # 1.0KB
add -- 表示 +
num|add:1 # 数字相加 string|add:"123" # 字符串拼接name_list|add:other_list # 列表合并
length -- 返回变量的长度
value|length
join 使用字符串拼接列表
name_list|join:"_"
truncatechars -- 按照字符分割.截断的字符串,多余的用"..."表示
long|truncatechars:"15" # 只显示15个字符,三个点也包含在15个字符内
truncatewords -- 按照单词分割(按照空格)
long|truncatewords:"6"
date -- 日期格式化
now|date:"Y-m-d H:i:s" # settings配置 -- Django中就可以不用日期过滤器USE_L10N = FalseDATETIME_FORMAT = "Y-m-d H:i:s"
safe -- 告诉django不需要转义,是安全的
js|safe ?# 在Python文件中设置from django.utils.safestring import mark_safemark_safe("<a href="https://www.baidu.com">跳转a>") a
?
4. 自定义过滤器
在app01文件下创建一个templatetags的python包
在包内创建py文件 -- 自定义名字 ( my_ tags.py )
在py文件中写入
from django import templateregister = template.Library() # regiter不能变,固定写法
定义函数 + 装饰器
@register.filter() # 添加装饰器def new_upper(value,arg=None): # arg接收过滤器的参数 return value.upper()
在模板中使用
% load my_tags % # 在模板中导入 "abc"|new_upper:dic # 函数名就是过滤器名
5. Tag -- 标签
for
% for i in list % forloop.counter i % endfor %
for循环可用的一些参数
Variable(变量) | Description(描述) |
---|---|
forloop.counter | 当前循环的从1开始的计数 |
forloop.counter0 | 当前循环的从0开始的计数 |
forloop.revcounter | 当前循环的倒叙计数(到1结束) |
forloop.revcounter0 | 当前循环的倒叙计数(到0结束) |
forloop.first | 当前循环是否是第一次循环 布尔值 |
forloop.last | 当前循环是否是最后一次循环 布尔值 |
forloop.parentloop | 当前循环父级循环的forloop |
for ... empty
% for name in name_list % name % empty % 空的数据% endfor %
if
% if p1.age < 18 % 他还是个宝宝% elif p1.age == 18 % 刚成年,可以出家% else % 骚老头子坏得很% endif %
with
% with agoni=person_list.1.name age=person_list.1.age % agoni age % endwith %
csrf_token
这个标签用于跨站请求伪造保护。
在页面的form表单里面写上% csrf_token %
form表单中有一个隐藏的input标签 name ="csrfmiddlewaretoken"
<form action="" method="post"> % csrf_token % <input type="text" name="name"> <button>提交button>form>
以上是关于Django -- 模板语法的主要内容,如果未能解决你的问题,请参考以下文章