Django-04-DjangoTemplate
注意:
在django中,对于 { { } }和{ % % },前后的 “{ {“ 以及 “{ %” 中间是没有空格的,由于hexo渲染的问题,本篇文章的某些部分不得已在中间加空格,但切记是没有的!!!
模板
在Django框架中,模板是可以帮助开发者快速生成呈现给用户
页面的工具
模板的设计方式实现了我们MVT中VT的解耦,VT有 着N:M的关
系,一个V可以调用任意T,一个T可以供任意V使用
模板处理分为两个过程
①加载
②渲染
摘要
模板主要有两个部分
①HTML静态代码
②动态插入的代码段(挖坑,填坑)
模板中的动态代码段除了做基本的静态填充,还可以实现一些
基本的运算,转换和逻辑
模板中的变量
视图传递给模板的数据
遵守标识符规则
语法{{ var }}
如果变量不存在,则插入空字符串
模板中的点语法
字典查询 grades grade
属性或者方法 grade.gname
索引 grades.0.gname
模板中的小弊端,调用对象的方法,不能传递参数
模板中的标签
- 语法
{ % tag % }
- 作用 1. 加载外部传入的变量
2.在输出中创建文本 3.控制循环或逻辑
if
格式:
1 | {%if 表达式%} |
for
格式:
1 | {%for变量in列表%} |
{{ forloop.counter }}
表示当前是第几次循环,从1数数{{ forloop.counter0}}
表示当前是第几次循环,从0数数{{ forloop.revcounter}}
表示当前是第几次循环,倒着数数,到1停{{ forloop.revcounter0}}
表示当前第几次循环,倒着数,到0停{{ forloop.first}}
是否是第一个布尔值{{ forloop.last}}
是否是最后一个布尔值
注释
单行注释
{ #被注释掉的内容# }多行注释
1
2
3{% comment %}
内容
{% endcomment %}
乘除
{ % widthratio 数 分母 分子 % }
整除
{ % if num|divisibleby:2 % }
ifequal
如果相等
1 | {% ifequal value1 value2 %} # 如果value1等于value2 |
ifnotequal
如果不相等
url
反向解析{ % url 'namespace:name' p1 p2 % }
csrf_token
用于跨站请求伪造保护的
格式{ % csrf_ token % }
过滤器
{ {var|过滤器} }
作用:在变量显示前修改
add 参数 加 数字相加 字符串拼接 列表拼接
{ { p.page| add:5 } }
没有减法过滤器,但是加法里可以加负数
{ { p.page| add:-5} }
lower 小写
{ { p.pname|lower } }
upper 大写
{ { p.pname|upper} }
default:参数 变量不存在或者为空 显示默认值
filesizeformat 人性化显示文件大小 kb PB
title 首字母大写
ljust:20 左对齐
rjust:20 右对齐
center:20 居中
length 长度
slice:’::’ 切片
join:’_’ 拼接列表
first 取第一个元素
last 取最后一个元素
safe 取消对HTML代码的转义
date:’Y-m-d H:i:s’ 日期的格式化
truncatechars:18 文本上的时候进行截断 按18截断
过滤器可以传递参数,参数需要使用引号引起来;
比如join: { { students|join'=' } }
默认值:default,格式{ {var|default value} }
如果变量没有被提供或者为False,空,会使用默认值
根据指定格式转换日期为字符串,处理时间的就是针对date进行的转换
{ { dateVal | date:'y-m-d' } }
常见过滤器使用方法可以参照
- https://www.cnblogs.com/pythonyeyu/p/10115769.html
- https://blog.csdn.net/tonghuaxl/article/details/80406884
HTML转义
将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
渲染成html:
{{ code |safe}}
(谨慎使用)1
2
3{% autoescape off%}
code
{% endautoescape %}不想渲染
1
2
3{% autoescape on%}
code
{% endautoescape %}CSRF
跨站请求伪造
某些恶意网站包含链接,表单,按钮,Js利用登陆用户在浏览器中的认证信息,进行非法操作,攻击服务,破坏数据
在表单中添加{ % csrf_ _token % }
在settings中的中间件MIDDLEWARE中配置打开'django.middleware.csrf.CsrfViewMiddleware',
模板中的继承
模板也可以继承
- 关键字block:挖坑,用来规划布局
- 首次出现,代表规划
- 第二次出现,代表填充以前的规划
- 第三次出现,代表填充以前的规则,默认动作是覆盖
- 如果不想覆盖,可以添加
{{block.super}}
- 这样就实现了增量式操作
- 如果不想覆盖,可以添加
1 | {% block XXX%} |
- extends继承,写在开头位置
{ % extends '父模板路径' % }
- include:加载模板进行渲染,可以将页面作为一部分,嵌入到其他页面中
格式{ % include '模板文件' % }
- block+extends
- 化整为零
- include+block
- 由零聚一
注意:
- 三个标签可以和混合使用,能用block+extends搞定的,就尽量不要使用include,因为效率比较低
- include可以单独使用
- 如果已经继承自一个父模板,子模版重写自己的页面结构,是不会生效的,只能在已有的“坑”中写。
静态资源
在工程中一般把css,js,img等固定的资源放入新建的static文件夹,并在settings中注册
以css为例
在页面的顶端导入{ % load static % }
或者{ % load staticfiles % }
链接即可写成href="{ % static 'css/demo.css' % }"
式的绝对路径
坑点:
- 仅在debug模式下可以使用
- 以后需要单独处理