Django模板系统
1.常用语法
Django模板中只记录两种符号:
{{ }}表示:变量,在模板渲染中替换成值
{% %}表示逻辑相关操作
2.变量
{{变量名}}
变量名由字母数字和下划线组成
点(.)在模板中有特殊含义,用来指向对象相对应的属性值
测试
def template_test(request):
num = 1 #数字
string = "hello world"#字符串
name_list = ['鸣人','佐助','卡卡西']#列表
dic ={'name':'凯皇','age':34} #字典
tup = ('斑爷','止水','水门')#元组
name_set = {'斑爷','止水','水门'}#集合
class Person(): #对象
def __init__(self,name,age):
self.name=name
self.age=age
def talk(self):
return "打工人打工人,打工人成为人上人"
JS = Person("js",24)
return render(request,'template_test.html',
{
'num':num,
'string':string,
'name_list':name_list,
'dic':dic,
'tup':tup,
'name_set':name_set,
'JS':JS,
})
Template 引用 .索引 .key .属性 .方法 方法不加括号
.key > .属性 > .方法 >索引
{{ num }}
<br>
{{ string }}
<br>
{{ name_list}}
<br>
{{ dic }}
<br>
{{ tup }}
<br>
{{ name_set }}
<br>
{{ JS.name }}
{{ JS.age }}
结果
1
hello world
['鸣人', '佐助', '卡卡西']
{'name': '凯皇', 'age': 34}
('斑爷', '止水', '水门')
{'水门', '斑爷', '止水'}
js 24
3.过滤器
{{ value |filter_name:参数}}
default
{{value|default:“默认值”}}
变量不存在,获取变量为空显示默认值
{{ baobei|default:"金金" }}
{{ kong|default: "暂无数据" }}
{#在冒号左右都不要+空格 否则会报错#}
如果传了参数,就以显示参数
filesize
显示文件的大小
{{ filesize|filesizeformat }}
'filesize':1024*1024*1024*1024,
1.0 TB
add+
数字的加法,字符串和列表的拼接
{{ 4|add:2 }}
{{ 4|add:-2 }}
{{ '4'|add:'-2' }}
{{ '4'|add:'xxx2' }}
{{ name_list|add:name_list }}
6
2
2
4xxx2
['鸣人', '佐助', '卡卡西', '鸣人', '佐助', '卡卡西']
lower 小写 文本变小写
upper 大写 文本变大写
title 首字母变大写
{{aj_name|lower|upper|title}}
一个过滤器的输出,可以成为一个过滤器的输入
length 变量的长度
{{ name_list|add:name_list|length }}
6
slice :切片
{{ name_list|add:name_list|slice:'0:2' }}
{{ name_list|first }}
获取首个元素
{{ name_list|last }}
获取最后一个元素
{{ name_list|join:'_' }}
通过_拼接
{{ string|truncatechars:'2' }}
通过字符截断
{{ string|truncatewords:'1' }}
通过单词截断
在setting中设置 时间格式
USE_L10N = False
DATETIME_FORMAT ='Y-m-d H:i:s'
TIME_FORMAT ='H:i:s'
DATE_FORMAT ='Y-m-d'
4.自定义过滤器
1.在App下创建一个名为templatetags的python 包(包的名字不能错)
2.创建一个python 文件,文件名自定义为(mytags.py)
3.在python包中
from django import template
register = template.Library()
变量名register不能错
4.给函数加 装饰器
#自定义过滤器
@register.filter
def add_arg(value,args):
#功能
return "{}_{}".format(value,args)
需要在settings下,配置app中,加入templatetags
在模板中使用
<br>
{% load mytags %}
{{ name_list.name|add_arg:'rsg' }}
5,模板
for
{% for name in name_list %}
<li> {{ forloop.counter }}{{ name }}</li>
<li> {{ forloop.revcounter }}{{ name }}</li>
{% endfor %}
forloop.counter 当前循环的序号
forloop.revcounter 当前循环倒序
forloop.first 是否是第一次循环
forloop.last 是否是最后一次循环
if elif endif
{% if JS.age < 100 %}
第一个砍
{% elif JS.age == 50 %}
第二个砍
{% elif JS.age > 24 %}
来吧
{% endif %}
不支持算术运算
不支持连续判断
{%csrf_token%}
用于跨站请求,伪造保护用的
在页面的form 表单上面写{%csrf_token%}
母版和继承
母版
1.一个包含多个页面的公告部分
2.定义多个block快,让子页面进行覆盖
继承
1.{% extends “母版的名字”%}
2.重新复写block 块
注意:
1.{% extends “母版的名字”%}母版的名字带引用
2.{% extends “母版的名字”%}写在第一行,上面不写内容
3.要显示的内容要写在block中
4.多写一个css/js的block块中
组件
1.把一小段公用的HTML文本写入一个HTML文件,nav.html
2.在需要该组件的模块中引用
{% include 'nav.html'%}
静态文件
{% load static %}
simple_tag
inclusion_tag
.{% extends “母版的名字”%}母版的名字带引用
2.{% extends “母版的名字”%}写在第一行,上面不写内容
3.要显示的内容要写在block中
4.多写一个css/js的block块中
组件
1.把一小段公用的HTML文本写入一个HTML文件,nav.html
2.在需要该组件的模块中引用
{% include 'nav.html'%}
静态文件
{% load static %}
simple_tag
inclusion_tag