Django边学边记—模板
功能
- 产生html,且不仅仅是一个html 包含:
- 静态内容:html,css,js
- 动态内容:模板语言
使用
- 一般使用 Django中提供的简写函数render调用模板
render(request,'XXX.html',{XX,XX})
模板语言(DTL)
变量
- 语法:{{ 变量 }}
- 变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
- 解析顺序:当变量中有点.的时候 解析顺序如下:
- 把点前面的部分当成字典,点后面的当成key
- 把点前面的当成对象,点后面的当成属性
- 把点前面的当成对象,点后面的当成对象的方法
- 如果点后面数字,把点前面当成列表,点后面当成下标
- 都取不到值,就将变量设为空字符串
标签(tags)
- 语法:{% 代码段 %}
- for标签
- {%for item in 列表%}
- 循环逻辑
- {{forloop.counter}}表示当前是第几次循环,从1开始
- {%empty%}
- 列表为空或不存在时执行此逻辑
- {%endfor%}
- if标签
- {%for item in 列表%}
- 循环逻辑
- {{forloop.counter}}表示当前是第几次循环,从1开始
- {%empty%}
- 列表为空或不存在时执行此逻辑
- {%endfor%}
- for标签
- 比较运算符如下:==、!=、<、>、<=、>=
- 注意:运算符左右两侧必须有空格
- 布尔运算符如下:and、or、not
过滤器(filter)
- 对常量进行一些操作,可以用过滤器,语法如下:
变量|过滤器:参数- 常用的过滤器有:date,default,length等,具体可参考Django文档
- 内置模板标签和过滤器 | Django 文档 | Django
https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/#ref-templates-builtins-filters 自定义模板标签和过滤器
- 共需要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 模块名 %}
注释
- 在模板中使用模板注释,注释的代码不会被编译,不会输出到客户端;与html注释不同的是html注释只能注释html内容,不能注释模板语言,且会输出到客户端。
- 单行注释语法: {#...#}
- 多行注释使用comment标签,语法:{%comment%}
...{%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/urls.py中 设置app名字
app_name = 'app'
- 在app/urls.py中为url定义name属性
url(r'^test/$', views.test,name='test')
- 在 项目/urls.py 中为include定义namespace属性
使用
- 在模板里:使用 url 模板标签。{%url 'namespace:name' [a[=x] b[=x]] %}
- 在 Python 编码:使用 reverse() 函数。reverse('namespace:name', kwargs={'a':x,'b':y})
- reverse 函数导入
from django.urls import reverse
- reverse 函数导入
Django边学边记—模板的更多相关文章
- Django边学边记——中间件
特点 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,用于全局修改Django的输入或输出. 每个中间件组件负责做一些特定的功能.中间件全部注册在sett ...
- Django边学边记—静态文件
概念 项目中的CSS.图片.js都是静态文件 一般会将静态文件放到一个单独的目录中,以方便管理 在html页面中调用时,也需要指定静态文件的路径,Django中提供了一种解析的方式配置静态文件路径 静 ...
- Django边学边记—新手Django建项目各流程细节
一.准备虚拟环境 1)安装 virtualenv pip install virtualenv 2)virtualenvwrapper pip install virtualenvwrapper-wi ...
- Django边学边记—视图
一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...
- Django边学边记—模型查询
查询集 两大特性 惰性执行:创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代.序列化.与if合用 缓存:查询集的结果被存下来之后,再次查询时会使用之前缓存的数据 返回列 ...
- Django边学边记--状态保持(cookie和session)
Cookie 概念: Cookie,也叫Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票. 特点: Cookie是由服务 ...
- Django基础,Day10 - template 模板引擎与路径设置
作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支 ...
- django在视图中使用模板
在视图中使用模板 在学习了模板系统的基础之后,现在让我们使用相关知识来创建视图. 重新打开我们在前一章在 mysite.views 中创建的 current_datetime 视图. 以下是其内容 ...
- Django加载静态网页模板
Django加载静态网页模板 步骤: 第一步:在子系统blog根目录下新建模版目录templates,里面新建一个login.html <!DOCTYPE html> <html l ...
随机推荐
- jupyter notebook使用python虚拟环境
jupyter指定环境启动 背景 系统环境中安装有jupyter及相关库,因项目需要,新建了一个torch相关的虚拟环境并安装了对应的内容, 此时,想通过系统中的jupyter启动一个可以应用虚拟环境 ...
- 005 媒体访问控制(MAC,Media Access Control)
一,MAC MAC是媒体访问控制器.以太网MAC由IEEE-802.3以太网标准定义.它实现了数据链路层.最新的MAC同时支持10/100/1000Mbps速率.通常情况下,它实现MII/GMII/R ...
- noip32
T1 暴力很好打,然而我是最后打的,所以只有40pts,其他人都有80pts的说 其实也应该想到的吧 80pts用的 \(set\) ,有个log,所以A不了. 正解: 把 \(set\) 换成 \( ...
- SSM自学笔记(五)
10.MyBatis入门操作 1.MyBatis的简介 1.1 原始jdbc操作(查询数据) 1.2 原始jdbc操作(插入数据) ##### 1.3 **原始**jdbc操作的分析 原始jdbc开发 ...
- 使用npm安装 Ant Design Vue 时报错—ant-design-vue@latest(sha1-qsf / gCIFcRYxyGmOKgx7TmHf1z4 =)seems to be corrupted.
安装 Ant Design Vue 时报错: npm install ant-design-vue --save ant-design-vue @ latest(sha1-qsf / gCIFcRYx ...
- TypeScript 入门指南 【大白话】
前言 聊聊为何要学习TypeScript? 从开发角度来讲, TypeScript 作为强类型语言,对属性有类型约束.在日常开发中少了减少了不必要的因参数类型造成的BUG,当你在使用同事封装好的函数时 ...
- 把 nodejs koa2 制作的后台接口 部署到 腾讯云服务器
我 使用 nodejs koa2框架 制作后端接口, 现在将nodejs koa2 部署到服务器 koa2项目 实现 接口 可以看我的 这篇文章: 简单实现 nodejs koa2 mysql 增删改 ...
- wpf 滚动文字 跑马灯
有时候也会有用,比如我的软件界面 放不下全长的文字时.或者状态栏显示一些时间,地点,温度,湿度等等这些东西 代码链接 https://gitee.com/csszbb/wpfnet5 这属于WPF ...
- java输入字符
1.创建一个Scanner对象. 2.调用.next()返回一个String类型用一个变量接受. 3.调用该String变量的.charAt(0),获取第一个字符. Scanner scn=new S ...
- java web课程设计(简单商城的前后端双系统,基于maven三模块开发)
1.系统分析 1.1需求分析 实现一个简单但功能完整的商城项目,从设计到实现,规范化完成该项目,锻炼javaweb项目的编写能力,理解软件工程的软件设计思想 1.2编程技术简介 本次课程主要使用的软件 ...