[Python] Django框架入门4——深入模板
说明:
本文主要深入了解模板(templates),主要涉及模板编写步骤、定义模板、模板继承、HTML转义、CSRF等。
一、模板
动态生成HTML、表达外观、实现业务逻辑(view)与显示内容(template)的分离。
1、创建templates文件夹
在根目录创建templates文件夹
2、模板处理
step1 加载:根据给定的标识找到模板然后预处理,通常会将它编译好放在内存中:
step2 渲染:使用Context数据对模板插值并返回生成字符串:
或者使用快捷方式(代替 step1和step2):
二、定义模板
模板语言包括:
变量:{{ varible }}
标签:{% 代码块 %}
过滤器:
注释:{# 代码或html #}
1、在模板中调用对象的方法
在models.py自定义类HeroInfo
在views.py中传递HeroInfo对象
在模板detail.html中调用
2、标签:{% tag %}
for 标签
{% for each in list %}
循环逻辑
{{ forloop.counter }}表示当前是第几次循环(开始下标为1)
{% empty %}
给出的列表不存在,执行此处
{% endfor %}
<!--【每页的数据】-->
<ul>
{% for each in list %}
<li>{{each.btitle}}</li>
{% endfor %}
</ul>
if 标签
{% if ... %}
逻辑1
{% elif ... %}
逻辑2
{% else %}
逻辑3
{% endif %}
<!--【页码链接】-->
{% for pindex in plist %}
{% if pIndex == pindex %}
{{pindex}}
{% else %}
<a href="/booktest/page{{pindex}}/" >{{pindex}}</a>
{% endif %}
{% endfor %}
comment 标签
{% comment %}
多行注释
{% endcomment %}
include:加载模板并以标签内的参数渲染
{% include "foo/bar.html" %}
url:反向解析
{% url: 'name' p1 p2 %}
csrf_token:跨站请求伪造保护
{% csrf_token %}
布尔标签:and\or, and比or优先级高
3、过滤器
语法:{{ 变量 | 过滤器 }}, 如{{ name | lower }} 表示变量name的值为小写输出。
例子:
if list1 | length > 1 判断列表的长度。
name | lower | upper 过滤器能够被 “串联”,构成过滤器链接。
list | join:", " 过滤器可传递参数,参数使用引号包起来。
value | dafaule:"空白" 如果一个变量没有被提供,或者值为false或空,则使用默认值,否则使用变量的值
value | date:"Y-m-d" 格式化输出date变量
三、模板继承
模板继承主要为了减少页面内容重复定义,实现页面内容的重用。
应用:网站的头部、尾部都是一样的,这些内容可以定义在父模板中,子模板不需要重复定义。
block标签:在父摸板中预留的区域,在子模板可以定义在父模板中,子模板不需要重复定义。
extends:继承、写在模板文件的第一行。
例子1:
step1:定义父模板 base.html
step2:定义子模板 index.html
step3:在子模板中使用 block填充预留区域
四、HTML转义
Django对字符串进行自动HTML转义。
会被自动转义的字符
HTML转义:就是包含html标签输出,而不被解释执行,原因是当用户提交字符串时,可能包含一些攻击性的代码,如js脚本。
Django会将如下字符串自定转义:
当显示不被信任的变量时使用escape过滤器,一般省略,因为django自动转义:{{ t1 | escape }}
关闭转义:
对于变量使用safe过滤器:{{ data | safe }}
对于代码块使用 autoescaoe标签:
{% autoescape off %}
{{ body }}
{% endautoescape %}
标签autoescape接受on或者off参数
自动转义标签在base模板中关闭,在children模板中也是关闭的。
字符串字面值
手动转义:{{ data | default:"<b>123</b>" }} 应写为:{{ data | default:"<b>123</b>" }}
[Python] Django框架入门4——深入模板的更多相关文章
- [Python] Django框架入门
说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...
- [Python] Django框架入门5——静态文件、中间件、上传图片和分页
说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...
- [Python] Django框架入门2——深入模型
说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...
- [Python] Django框架入门3——深入视图
说明: 本文主要深入了解视图(views.py),涉及路由配置.定义视图.Request对象.Response对象.状态保持等. 一.路由配置 1.配置位置(settings.py 的 ROOT_UR ...
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcode qr = ...
- Python Django框架笔记(六):模板
(一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...
- Python Django框架笔记(五):模型
#前言部分来自Django Book (一) 前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...
- Python Django框架笔记(三):django工作方式简单说明和创建用户界面
(一) 说明 简单说明下django的工作方式,并举2个例子. (二) Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...
- Python Django框架笔记(一):安装及创建项目
#推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...
随机推荐
- javascript获取指定区间范围随机数
//获取指定区间范围随机数,包括lowerValue和upperValuefunction randomFrom(lowerValue,upperValue){ return Math.floo ...
- cookbook_元编程
1给函数添加一个包装 问题:给函数加一个外包装层,已添加额外的处理,例如,记录日志,计时统计等 解决方案:可以定义一个装饰器来包装函数 2编写装饰器时如何保存函数的元数据 问题:当一个函数被装饰器装饰 ...
- 负载分配—DNS的域名解析
DNS(Domain Name System)是因特网的一项服务,它作为域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网.人们在通过浏览器访问网站时只需要记住网站的域名即可,而不需 ...
- Jmeter之CSS选择器/JQuery选择器关联
选择器: CSS选择器或JQuery选择器是Jmeter支持的两种语法,下面对其两种语法进行简单介绍 CSS选择器 JQuery选择器 Chrome - 复制CSS选择器 Google Chrome在 ...
- JDBC秒变C3P0连接池——再加连接解耦
从JDBC连接到C3P0数据库连接池 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ② ...
- Git 从master拉取代码创建新分支
从master拉取新分支并push到远端 开发过程中经常用到从master分支copy一个开发分支: 1.切换到被copy的分支(master),并且从远端拉取最新版本 $git checkout m ...
- EM算法和高斯混合模型GMM介绍
EM算法 EM算法主要用于求概率密度函数参数的最大似然估计,将问题$\arg \max _{\theta_{1}} \sum_{i=1}^{n} \ln p\left(x_{i} | \theta_{ ...
- Python之assert断言语句
关键字assert构成断言语句,主要是可以在我们书写一个新的程序时,可以使用它帮我们锁定bug范围. 表达式: assert 表达式 ‘窗口提示的信息’ 括号中的项目为选填项目,选填项目将会在表达式的 ...
- 使用 OpenSSL为WindowsServer远程桌面(RDP)创建自签名证书 (Self-signed SSL certificate)
前言 笔者查阅很多资料,才写成此文章,如有错误,请读者们及时提出. 一般大家使用远程桌面(Remote Desktop)连接Windows Server时,总会有一个警告提示,如图1 图1 出现此警告 ...
- LeetCode :2.两数相加 解题报告及算法优化思路
题目连接:2.两数相加 题意 题目难度标为 中等, 因为题意上有一部分理解难度,以及需要数据结构的链表基础. 还不知道到链表的童鞋可以粗略的看下百度百科或者是翻出数据结构的书看一看,通俗一点的语言来解 ...