Django之Template
template模板
- template模板的使用帮助我们将数据对应的插入到html文档中显示给用户。
一.template和context对象
t = template('my name is {{ name }}.') c = context({'name': 'sfencs'}) print(t.render(c))
二.引入html中
在视图函数中:
def login(req): return render(req,"test.html",{"name":"sfencs"})
在html中
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> {{ name }} </body> </html>
这样在浏览器中渲染出的就是sfencs,即把{{ name }}替换成了views函数传递的字典对应的值。
三.变量
如上节所写,{{ }}中放入的就是变量
可是有时候我们传给模板的并不一定只是一个字符串,有可能是一个字典,一个列表,那怎样在模板中对它们进行操作呢?
方法是使用”.”句点号
- 表示索引:item.2
- 表示字典的键的值:item.key
- 表示对象的属性:item.property,自定义的类的对象的属性也可以
- 表示对象的方法:item.function_name,只能使用不需要参数的方法
四.过滤器filter
filter就相当于是对模板中变量执行的方法,使用方法是{{obj|filter:param}}
介绍几个简单的pyth内置的过滤器
- add : 给变量加上一个值
- addslashes:给变量中的引号前加上斜线
- capfirst:首字母大写
- default:如果值是false,就替换成设置的默认值,否则就是用本来的值
具体其他的内置过滤器可以参考
这里过滤器后边只能跟一个参数。
五.tag标签
if
{% if age == 3 %} <p>等于3</p> {% elif age > 3 %} <p>大于3</p> {%else %} <p>小于3</p> {% endif %}
注意age与符号之间有空格
if标签中可以使用and,or,但不能同时使用and和or
for
{% for i in people %} <h1>{{ people.name }}</h1> <ul> {% for j in i.hobby %} <li>{{ j }}</li> {% endfor %} </ul> {% endfor %}
for标签中自带了一个forloop变量可以提供有关循环的信息
- forloop.counter表示循环的次数,它从1开始计数
- forloop.counter0表示循环的次数,它从0开始计数
- forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1
- forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引
- forloop.first当第一次循环时值为true
{% empty %}表示如果循环项为空则执行的部分
{% for obj in list reversed %}表示反序循环
{%csrf_token%}
在表单最后加上{%csrf_token%},用于防治跨站攻击验证
{% with %}
用更简单的变量名替代复杂的变量名
{% with simple=complex %} {{simple }} {% endwith %}
{% verbatim %}
不适用render传来的content
{% verbatim %} {{ age }} {% endverbatim %}
页面显示的是
{{ age }}
六.自定义filter和simple_tag
1.在app中创建templatetags文件包
2.在templatetags文件包下创建一个python文件,名称自己取如:my_tags
3.在my_tags中引入template,创建register
from django import template register = template.library()
4.创建自己的filter或tag
使用相应的装饰器
@register.filter def filter_mult(v1,v2): return v1 * v2 @register.simple_tag def simple_tag_multi(v1,v2): return v1 * v2
5.在html中引入该文件
{% load my_tags %}
6.在html中使用
{{ age|filter_mult:2 }} {% simple_tag_mult age 3 %}
7.注意
- filter最多只能有两个参数,tag可以有多个参数
- filter可以使用在if等语句后,tag不可以
七.extend模板继承
模板继承可以解决html代码重复的问题,比如两个页面的大体结构类似,只有小部分的内容不同,如果写到两个不同的html中就会有相当多的代码重复,这个时候将相同部分的html写到一个html中,不同的部分用模板表示,再用一个新的html继承它,并将模板的部分代替。
1.基础html定义要替代的代码块
{% block content %} {% endblock %}
这里block可以起不同的名称,用于不同的代码块的替换
2.在另一个html中继承它
首先要在文档开头添加{% extends “base.html” %},表示要继承的html
然后按照block名称相应的写入要代替的内容
{% block title %} {{age}} {% endblock %}
3.例如:
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> {% block title %} {% endblock %} </body> </html>
{% extends "base.html" %} {% block title %} {{age}} {% endblock %}
上一篇: 学习PyQuery库
下一篇: TensorFlow实现模型评估
推荐阅读
-
Android Studio开发之 JNI 篇的简单示例
-
Android开发之瀑布流控件的实现与使用方法示例
-
Android 媒体开发之MediaPlayer状态机接口方法实例解析
-
ASP.NET 2.0中的数据操作之八:使用两个DropDownList过滤的主/从报表
-
Android第三方登录之QQ登录
-
python学习之第三方包安装方法(两种方法)
-
Android编程视频播放API之MediaPlayer用法示例
-
ASP.NET 2.0中的数据操作之七:使用DropDownList过滤的主/从报表
-
在ASP.NET 2.0中操作数据之六:编程设置ObjectDataSource的参数值
-
java图像处理之倒角距离变换