文章目录

  • 一、标签的使用(tag)
  • 二、自定义filter和simple_tag
  • 三、extend模板继承

一、标签的使用(tag)

1、语法格式:{% tags %}

2、提供的几种标签

  • {% if %}:计算一个变量值,如果是“true”,即它存在、不为空并且不是false的boolean值,系统则会显示{% if %}和{% endif %}间的所有内容
{% if ani.age > 25 %}<h1>{{ ani.name }},you have a lot of responsibilities!</h1>
{% elif ani.age >= 18 %}<h1>{{ ani.name }},you have been an adult!</h1>
{% else %}<h1>You just a child!</h1>
{% endif %}
  • {% for %}:允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容
{#for循环#}
{#注意:for是没有办法拿到索引的,只能用forloop.counter来拿#}
{% for name in li %}<h3>{{ forloop.counter }}:{{ name }}</h3><h4>{{ forloop.revcounter }}:{{ name }}</h4>
{% endfor %}{% for name in li %}{% if forloop.first %}
{#        创建一个列表标签,并且带有class为first的标签背景色变红#}<li class="first">{% else %}<li>{% endif %}{{ name }}</li>{% empty %}<h1>没有相关文章!</h1>
{% endfor %}
  • {%csrf_token%}:用于生成csrf_token的标签,用于防治跨站攻击验证。
  • {% url %}:引用路由配置的地址
{#{% url  %}引用路由配置地址#}
<form action="{% url 'login' %}" method="post"><p>账号:<input type="text"></p><p>密码:<input type="text"></p><p><input type="submit"></p>{% csrf_token %}
{#    一种Django的安全机制,相当于给页面加上了一个身份证——一串编码,有了这个才可以正常跳转到url 'login'页面#}
</form>
  • {% with %}:用更简单的变量名替代复杂的变量名
{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
  • {% verbatim %}:禁止render
{% verbatim %}{{ hello }}
{% endverbatim %}
  • {% load %}: 加载标签库

二、自定义filter和simple_tag

1、自定义filter过滤器

  • a、首先在app中创建templatetags模块
  • b、然后创建任意 .py 文件,如:myTag.py
  • c、套用引用代码:
from django import template
from django.utils.safestring import mark_saferegister = template.Library()   #register的名字是固定的,不可改变
  • d、编写自定义的函数
  • e、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tags.py :{% load my_tags %}
  • f、在html中调用:由于filter函数只接收两个参数,因此此处只能传入一个参数,可以是列表、字典
<h1>filter:{{ ani.age|filter_muti:3 }}</h1>

2、自定义simple_tag:
可以传任意个参数,用空格隔开
simple_tag_muti函数已经在上图展示了,这里直接调用

<h1>simple_tae:{% simple_tag_muti 26 2 10%}</h1>

3、注意:

  • a、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag
  • b、filter可以用在if等控制语句后,simple_tag不可以
{% if num|filter_multi:30 > 100 %}{{ num|filter_multi:30 }}
{% endif %}

三、extend模板继承

1、include 模板标签
该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

2、extend继承模板标签
在整个网站中,如何减少共用页面区域(比如站点导航)所引起的重复和冗余代码?
比如,如果有一个更典型的网站,它有导航条、样式表,可能还有一些 JavaScript 代码,事情必将以向每个模板填充各种冗余的 HTML 而效率低下。
传统解决方法是使用 服务器端的 includes ,你可以在 HTML 页面中使用该指令将一个网页嵌入到另一个中。 事实上, Django 通过刚才讲述的 {% include %} 支持了这种方法。

3、extend 的本质
模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。

4、继承的步骤
(1) 创建 base.html 模板,在其中定义站点的主要外观感受。 这些都是不常修改甚至从不修改的部分。
(2) 为网站的每个区域创建 base_SECTION.html 模板(例如, base_photos.html 和 base_forum.html )。这些模板对base.html 进行拓展,并包含区域特定的风格与设计。
(3)为每种类型的页面创建独立的模板,例如论坛页面或者图片库。 这些模板拓展相应的区域模板。
这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作

5、继承后的修改

{#继承base.html#}
{% extends 'base.html' %}{#修改样式:前提是base里面也必须有{% block style %}#}
{% block styles %}<style>h2{background-color: yellowgreen;}</style>
{% endblock %}{#但是有一部分需要修改,则只能改{{ block  }}里的内容#}
{% block content %}
{#    获取父类#}{{ block.super }}{% for s in student_list %}<h2>学生{{ s }}</h2>{% endfor %}
{% endblock %}

6、extend继承注意

  • 如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。

  • 一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。

  • 如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。
    如果你需要访问父模板中的块的内容,使用 {{ block.super }}这个标签吧,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。

  • 不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。
    也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容。

Python框架篇之Django(Template模版:标签tag、自定义filter、extend模板继承)相关推荐

  1. Python框架篇之Django(Django项目搭建全过程、Web框架与Django)

    文章目录 一.Web框架与Django本质 二.从安装到实现一个完整的Django项目 一.Web框架与Django本质 1.Web框架的理解 框架,特指为解决一个开放性问题而设计的具有一定约束性的支 ...

  2. Python框架篇之Django(Template基础:模板语法、过滤器filter)

    文章目录 一.Template介绍 二.模板语法 三.过滤器(filter) 一.Template介绍 Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给 ...

  3. Python框架篇之Django(基本流程、命令行、配置文件)

    文章目录 一.总述 二.Django的实现流程 三.django的命令行 四.配置文件(settings) 1.MEDIA_ROOT和MEDIA_URL 2.STATIC_ROOT和STATIC_UR ...

  4. Python框架篇之Django(路由系统URL、视图函数views)

    文章目录 一.路由系统(URL) 二.视图函数(views) 一.路由系统(URL) 1.URL配置 (URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用 ...

  5. Python框架篇之Django(ORM对象关系映射)

    文章目录 一.认识ORM 二.模型常用字段类型 三.数据表的增删改查 四.配置日志 一.认识ORM 1.概念:简单来说,就是用面向对象的方式去操作数据库的创建表以及增删改查等操作. 2.ORM的优点 ...

  6. Python框架篇之Django(Models数据表的创建、数据库配置)

    文章目录 一.数据库的配置 二.Models数据表的创建 三.在Pycharm中显示 一.数据库的配置 1. django默认支持 sqlite,mysql, oracle,postgresql数据库 ...

  7. Python框架篇之Django(Models的多表操作)

    一对多 1.添加记录 #publish_id=2Book.objects.create(name="Python进阶",price=77,pub_date="2019-1 ...

  8. Django 框架篇: 一. Django介绍; 二. 安装; 三. 创建项目;

    Django介绍 一. web框架:   框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来 ...

  9. 8 - 9 template两大功能 : simple_tag、模板继承

    2019独角兽企业重金招聘Python工程师标准>>> template 两大功能 一些基本语法 比如 if for jquery引入 修改时间格式 模板继承 我们在生产中会发现写的 ...

最新文章

  1. hadoop2.6.0实践:002 检查伪分布式环境搭建
  2. javascript进制转换_44道JavaScript送命题
  3. Linux pwn入门教程——CTF比赛
  4. TCP 滑动窗口简述
  5. 云炬随笔20161117
  6. 计算机指令系统课件,计算机组成原理课件05指令系统.ppt
  7. 朴素贝叶斯--文档分类
  8. 数据的gzip压缩解压缩_使用GZIP和压缩数据
  9. 华为任职资格_华为采购总部专业任职资格标准|
  10. Python3 多进程共享变量实现方法(亲测)
  11. 2015 年总结 - 十年
  12. 学习git: 忽略某些文件(夹)的跟踪
  13. mcgs组态软件中字体如果从左到右变化_MCGS脚本程序 (2)
  14. 【软件安装】MacBook 安装 MATLAB 2020a
  15. linux攻防比赛_浅谈网络攻防大赛中的Linux服务器的加固
  16. 高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少?
  17. 压力传感器常用的3种检测方法
  18. DM DBLINK使用笔记
  19. 招商银行笔试题之员工考勤记录
  20. 纵向时间线html,51个css时间轴

热门文章

  1. python第一单元测试,知到Python语言应用第一单元章节测试答案
  2. python3读取excel方法封装_python-excel读写封装
  3. python怎么输出数组全部数据_打印numpy数组的全部内容
  4. php 周末 培训,济南php周末培训班
  5. ibm服务器更换主板怎么恢复系统,记号一次更换IBM X3650M4主板后RAID无法启动的解决...
  6. biodist r语言_R语言 Biostrings包 pairwiseAlignment()函数中文帮助文档(中英文对照)
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫情信息分析管理系统
  8. ASP.NET Core学习——7
  9. 使用EL表达式,显示Action中的数据
  10. 第二次作业+105032014149