说明:

  本文主要深入了解模板(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}}&nbsp;&nbsp;
{% else %}
<a href="/booktest/page{{pindex}}/" >{{pindex}}</a>&nbsp;&nbsp;
{% 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:"&lt;b&gt;123&lt;/b&gt" }}

  

  

[Python] Django框架入门4——深入模板的更多相关文章

  1. [Python] Django框架入门

    说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...

  2. [Python] Django框架入门5——静态文件、中间件、上传图片和分页

    说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...

  3. [Python] Django框架入门2——深入模型

    说明: 本文主要深入了解模型(models.py),涉及ORM简介.模型定义.模型成员.模型查询.自连接等.需要一定基础,可以先走一走基本入门流程. 附录一使用mysql数据库,附录二Django开发 ...

  4. [Python] Django框架入门3——深入视图

    说明: 本文主要深入了解视图(views.py),涉及路由配置.定义视图.Request对象.Response对象.状态保持等. 一.路由配置 1.配置位置(settings.py 的 ROOT_UR ...

  5. 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!

    利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow  + qrcode 模块 核心代码import qrcode qr = ...

  6. Python Django框架笔记(六):模板

    (一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...

  7. Python Django框架笔记(五):模型

    #前言部分来自Django Book (一)    前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...

  8. Python Django框架笔记(三):django工作方式简单说明和创建用户界面

    (一)  说明 简单说明下django的工作方式,并举2个例子. (二)  Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...

  9. Python Django框架笔记(一):安装及创建项目

     #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...

随机推荐

  1. C/C++指针函数和函数指针

    一.指针函数 当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中. 格式: 类型说明符 * 函数名(参数) 当然了,由于返回的是一个地址,所以类型说明 ...

  2. Java--重载与重写的区别

    1.重写必须继承,重载不用.2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同.3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关.4.重写不可以抛出父类没有抛出的一般 ...

  3. ~~面向对象进阶——__name__=="__main__"~~

    进击のpython 面向对象进阶--__name__=="__main__" 前面我们在讲模块的时候,其实还有一个知识点没有很好的讲 那就是main和name 可能你们在看一些代码 ...

  4. JNDI资源(一)

    JNDI:Java命名与目录接口 是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录的通用.统一的服务. 使用JNDA的步骤: 1.配置资源. //Tomcat跟目录/conf/co ...

  5. webstorm和git安装后,terminal输入git命令,提示'git' 不是内部或外部命令

    最近换了工作,拿到电脑重新搭建编程环境,踩了好多git和sourcetree的坑,就是一直拉不下来代码,晕·~~经过几天的爬坑,终于可以拉取推送代码了!!! 问题:webstorm和git都安装完成, ...

  6. oracle一条语句插入多个值的方法

    今天在实践过程中遇到一个问题, 我想往数据库插入多条数据时,使用了如下语句: insert into 表1 (字段1,字段2) values (1,2),(2,3),(3,4); 这条语句在mysql ...

  7. 【iOS】ERROR ITMS-90032: "Invalid Image Path...

    用 Application Loader 提交苹果审核时出现了这个问题,具体如下: ERROR ITMS-: "Invalid Image Path - No image found at ...

  8. 以太坊RLPx传输协议

    本文主要内容翻译自:The RLPx Transport Protocol,其中添加了一些个人的理解,由于密码学水平有限,不正确之处望指正.另外原文可能已经更新,最新内容请直接阅读原文. 本文档定义了 ...

  9. JAVA基础——Switch条件语句

    JAVA基础——switch 条件语句 switch语句结构: switch(表达式){ case值1: 语句体1: break: case值2: 语句体2: break: case值3: 语句体3: ...

  10. Liunx查看后1000行的命令以及查看中间部分

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...