Django边学边记—模板
2021-09-14 16:24
681 查看
功能
- 产生html,且不仅仅是一个html 包含: 静态内容:html,css,js
- 动态内容:模板语言
使用
- 一般使用 Django中提供的简写函数render调用模板
-
render(request,'XXX.html',{XX,XX})
模板语言(DTL)
-
变量
- 语法:{{ 变量 }}
- 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
- 解析顺序:当变量中有点.的时候 解析顺序如下: 把点前面的部分当成字典,点后面的当成key
- 把点前面的当成对象,点后面的当成属性
- 把点前面的当成对象,点后面的当成对象的方法
- 如果点后面数字,把点前面当成列表,点后面当成下标
- 都取不到值,就将变量设为空字符串
标签(tags)
- for标签
{%for item in 列表%}
- {%for item in 列表%}
- 注意:运算符左右两侧必须有空格
过滤器(filter)
变量|过滤器:参数
自定义模板标签和过滤器
- 共需要5步
- 在应用中创建templatetags目录。(添加
templatetags
模块后,需要重启服务器) - 在上面目录中创建__init__.py 和模块名.py 文件。(要自定义的 tags或filters模块)
- 导入模块,创建一个Library对象,用于装饰自定义的过滤器
from django import template register = template.Library()
- 编写自定义的函数,并用上面装饰器进行装饰注册。(函数至少接受1个最多接受2个参数)
@register.filter def XXX(num,[]): return XXX
- 在html模板中加载自定义的过滤器
{% load 模块名 %}
注释
- 单行注释语法: {#...#}
...{%endcomment%}
模板继承
- 主要是为了提高代码重用,减轻开发人员的工作量
- 典型应用:网站的头部、尾部信息
父模板
- 如果发现在多个模板中复制一段代码,那就应该把这段内容定义到父模板中
- 标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同
- 为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同
- 父模板中也可以使用上下文中传递过来的数据
{%block 名称%} 预留区域,可以编写默认内容,也可以没有默认内容 {%endblock 名称%}
子模板
- 标签extends:继承,写在子模板文件的第一行
{% extends "父模板名称.html"%}
- 子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值
- 填充父模板中指定名称的预留区域
{%block 名称%} 实际填充内容 {{block.super}}用于获取父模板中block的内容 {%endblock 名称%}
HTML转义
- 出于安全考虑,模板对上下文传递的字符串进行输出时,会对以下字符自动转义
小于号< 转换为<
大于号> 转换为>
单引号' 转换为'
双引号" 转换为 "
与符号& 转换为 &
-
关闭转义主要有2种方法:
单个变量可以用过滤器safe:{{变量|safe}} - 设置一段代码都禁用转义,使用标签autoescape:接受on、off参数
{%autoescape off%}
...
{%endautoescape%}
CSRF
- CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。
- 重要信息如金额、积分等,采用POST方式传递
- 启用CSRF中间件,默认启用
- 在form表单中加入标签{% csrf_token %}
- 如果不个别视图关闭csrf验证可以用装饰器
-
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def getip(request): pass
反向解析
-
作用:
从相应的 Django 视图标识以及要传递给它的参数来获取相关联的 URL - 当一个url配置的地址发生改变时,页面上使用反向解析生成地址的位置不需要变化
实现步骤
- 在 项目/urls.py 中为include定义namespace属性
url(r'^',include('app.urls',namespace='app'))
app_name = 'app'
url(r'^test/$', views.test,name='test')
使用
- reverse 函数导入
from django.urls import reverse
相关文章推荐
- [Django模板系统]大致了解Django的模板系统
- [Django模板系统]方法调用与无效变量处理
- Django 模板语言:如何重复for loop词典的值
- 复习django项目三——视图显示模板templates
- Django - 模板层 - 模板的导入和继承 、静态文件的使用
- django--Admin模板
- 创建Django项目(六)——模板
- Django模板HTML中for循环遍历的是上下文context的key
- Django框架(二十一:设置全局变量以供多个视图函数模板使用)
- Django学习日记 第二天 mysql配置 和 模板的使用
- 10:django 模板语言
- django模板导入js,css等外部文件
- Django 快速搭建博客 第八节(自定义模板,归档,分类页面)
- Django 模板查找机制
- Django模板——模板继承
- django模板获取list中指定索引的值
- django在project下的app目录下添加模板文件夹templates注意事项
- 自定义Django模板过滤器和标签
- 小白必看!Django 模板语言进阶!
- DJango内建模板转向jinja2的小脚本