一、模板标签

Django模板引擎提供的可以在模板中进行的各种逻辑操作,是函数调用的一种特殊形式,如循环、判断等功能,期语法规则为:

{% tag %} content
{% tag 参数1 参数2 %} content
{% tag %} content {% endtag %}

详细模板标签操作请点击模板标签学习网址

1.常用标签

(1)if...elif...else...       可以使用and/or/in/not/==/!=/<=/>=, 来进行判断

(2)for...in...           与python中的for...in...用法相同

  • forloop.counter       当前迭代次数,下标从1开始
  • forloop.counter0       当前迭代次数,下标从0开始
  • forloop.revcounter     与forloop.counter一样,下标从大到小:3,2,1
  • forloop.revcounter0     与forloop.counter0一样,下标从大到小:2,1,0
  • forloop.first           返回bool类型,如果是第一次迭代,返回True,否则返回False
  • forloop.last         返回bool类型,如果是最后一次迭代,返回True,否则返回False
  • forloop.parentloop     如果发生多层for循环嵌套时,返回上一层的for

(3)for...in...empty...      如果没有数据,跳转到empty中

(4)load                加载第三方标签,例如{% load static %}

(5)url                  返回一个命名了的url的绝对路径

(6)with                变量缓存,相当于导包时的"as", 例如{% with stu1 = student.0.id %}

(7)autoescape         开启和关闭自动转义

2. 使用案例

把学生信息表传到模板,要求:

  1.把女学生的字体改成红色

  2.为每位学生的序号添加链接,点击跳转到该学生的详细信息页面

1).在student/views.py中编辑syudent应用的视图函数

from django.http import HttpResponse
from django.shortcuts import render def detail(request, id):
return HttpResponse('ID为%s的学生详情页' %id) def index(request):
students = [
{"id":10117,"name":'Willy', "age":21, "sex":"Male"},
{"id":10121,"name":'Kitty', "age":20, "sex":"Female"},
{"id":10128,"name":'Kate', "age":19, "sex":"Female"},
{"id":10133,"name":'Tom', "age":22, "sex":"Male"},
{"id":10135,"name":'Rose', "age":20, "sex":"Female"}
]
return render(request, 'student/index.html', context={
'students':students
})

2).在templates/student/index.html中编辑模板

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板标签使用案例</title>
</head>
<body>
<div>
<table class="table">
<thead>
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
</tr>
</thead>
<tbody>
{% for stu in students %}
{# 使用if标签把女学生的字体颜色变成红色#}
<tr {% if stu.sex == 'femal' %} style={"color":"red"} {% endif %}> {# 添加a标签,点击后跳转到127.0.0.1:8000/student/detail/stu.id页面#}
{# <td><a href="/student/detail/{{ stu.id }}">{{ forloop.counter }}</a></td>#}
<td><a href="{% url 'student:detail' stu.id%}">{{ forloop.counter }}</a></td>
<td>{{ stu.name }}</td>
<td>{{ stu.age }}</td>
<td>{{ stu.sex }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</body>
</html>

二.模板继承与引用

在实际的开发过程中,页面会非常复杂,有多个html文件编辑不同的页面。有时候不同的html文件会有相同的内容,这会造成冗余。针对这种问题,Django的模板引擎提供继承和引用的功能。

1.模板的继承

Django模版引擎通过模版继承,可以让你创建一个base模板,它包含其他站点中的全部元素以及公共部分,并且可以定义能够被子模版覆盖的 blocks 。

子模板通过"extends"标签实现对base模板的继承,并通过"blocks"标签覆盖内容

1).templates/student/base.html:基模板,用于模板的继承页

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}base模板{% endblock %}</title>
{% block link %} {% endblock %}
</head>
<body>
{% block content %}
<h1>我是base模板</h1>
{% endblock %}
</body>
</html>

2).templates/student/inherit.html:继承模板,用于继承base模板

{% extends 'student/base.html' %}
{% block title %}学生信息表{% endblock %}
{% block link %}
<link rel="stylesheet" href="student/css/mystyle.css">
{% endblock %}
<body>
{% block content %}
<h1>我是继承模板,继承base模板</h1>
{% endblock %}
</body>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
</html>
2.模板的引用

Django通过"inclue"标签实现一个模板在特定位置引用另一个模板的内容

1).templates/student/ad.html:广告模板,用于模板的引用页

<body>
<h1 id="h1">我是一个广告, 慎点!</h1>
<script>
var h = document.getElementById("h1");
var color = 'blue';
{#color_change()实现每隔1秒,红蓝之间切换颜色#}
function color_change() {
if (color == 'blue'){
color = 'red';
}
else{
color = 'blue';
}
h.style.color = color;
setTimeout('color_change()', 500)
}
color_change()
</script>
</body>

2).templates/student/iquote.html:引用模板,用于引用ad广告模板

<body>
<div>
<h1> 我是引用模板,引用ad模板</h1>
</div>
<div style="position:fixed; bottom:0px">
{% inclue 'student/ad.html' %}
</div>
</body>

Django入门--模板标签、继承与引用的更多相关文章

  1. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  2. Django 04 模板标签(if、for、url、with、autoeacape、模板继承于引用、静态文件加载)

    Django 04 模板标签(if.for.url.with.autoeacape.模板继承于引用.静态文件加载) 一.if.for.url.with.autoescape urlpatterns = ...

  3. Django——4 模板标签 模板的继承与引用

    Django 模板标签 常用标签 模板的继承与引用 模板标签 标签在渲染的过程中提供任意的逻辑 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. ...

  4. django自定义模板标签

    # 创建自定义模板标签目录 django_project_name app_name templatetags (创建Python Packge,注意一定要用templatetags这个名字) my_ ...

  5. Django 自定义模板标签TemplateTags

    创建自定义的模板标签(template tags) Django提供了以下帮助函数(functions)来允许你以一种简单的方式创建自己的模板标签(template tags): simple_tag ...

  6. Django 自定义模板标签和过滤器

    1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py . views.py 等处于同一层次. ...

  7. Django 自定义模板标签 报错django.template.exceptions.TemplateSyntaxError: '####' is not a registered tag library. Must be one of:

    我写代码遇到这个错误,但是发现程序没有写错,好像是程序有缓存,重新运行几次就好了. 自定义模板标签,可以不用写views,url直接通过自定义函数把变量传给模板. 具体实现: 1.在app下新建Pyt ...

  8. Django自定义模板标签和过滤器

    1.创建模板库 在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py. 在这个模块中编写相关代码. 注意:templa ...

  9. Django之模板层-继承

    模板语法:继承 Django模版引擎中最强大也是最复杂的部分就是模版继承了.模版继承可以让您创建一个基本的"骨架"模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 b ...

随机推荐

  1. Android开发之BUG专讲:入门篇(一)

    前言: 本文作者:周才智 转载须注明作者与出处.违者必究. 原文地址:http://segmentfault.com/a/1190000004380690 话说诸葛亮是一个优秀的程序员,每个锦囊都是应 ...

  2. 在android中读写文件

    在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...

  3. B1108 [POI2007]天然气管道Gaz 贪心

    啊啊啊,这题有毒.我想了各种花式数据结构,最后告诉我贪心???受不了... 题干: Description Mary试图控制成都的天然气市场.专家已经标示出了最好的天然气井和中转站在成都的地图.现在需 ...

  4. [JavaEE] 了解Java连接池

    转载自51CTO http://developer.51cto.com/art/201006/207768.htm 51CTO曾经为我们简单的介绍过Java连接池.要了解Java连接池我们先要了解数据 ...

  5. hiho一下第76周《Suzhou Adventure》

    我是菜鸡,我是菜鸡,我是菜鸡....重要的事说三遍 算是第一次做树形dp的题吧,不太难.. 园林构成一棵树,root为1,Hi从root出发,有k个园林必须玩,每个园林游玩后会得到权值w[i],最多玩 ...

  6. cloudfoundry-----------service servicebroker 转载

    目前,CloudFoundry已经集成了很多第三方的中间件服务,并且提供了用户添加自定义服务的接口.随着Cloud Foundry的发展,开发者势必会将更多的服务集成进Cloud Foundry,以供 ...

  7. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

  8. uirecorder录制脚本

    安装步骤不再描述. 将手机通过数据线连接到mac 然后输入启动macaca的命令: macaca server --port 4444 --verbose & 在输入 命令:uirecorde ...

  9. WPF下DataGrid的简单应用

    Dim dt As New DataTable() '------------------- dt.Columns.Add(New DataColumn("名称")) dt.Col ...

  10. C++ 类型转换操作与操作符重载 operator type() 与 type operator()

    类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的 ...