Django之tpl模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
from django.shortcuts import render

# Create your views here.
def index(request):
s = 'hello'
l = ['Python', 'PHP', 'Shell', 'Go']
dic = {'name': 'ropon', 'age':18}
import time
riqi = time.strftime("%Y-%m-%d")
import datetime
now = datetime.datetime.now()
class Person(object):
def __init__(self, name):
self.name = name
def eatting(self):
return self.name + ' eatting...'
person_ropon = Person('ropon')
person_pengge = Person('pengge')
person_luo = Person('luo')

person_list = [person_ropon, person_pengge, person_luo]

testvar = '测试过滤器'

filesize = 2354230

str = 'very good'

artic = '如附图测试可以访问,请您清空浏览器缓存或者换个浏览器后访问看看,若仍无法访问'

link = '<a href ="http://www.ropon.top">Ropon运维</a>'

num = 99

# locals() 代表所有局部变量
# return render(request, 'app01/index.html', {'s':s})
return render(request, 'app01/index.html', locals())

# 模板语法之变量
# {{ var_name }}
# 可渲染字符串 列表 字典 元组 集合 日期对象 以及类的属性及方法
# 遍历复杂数据结构的关键字句点字符. l.0 dic.name

# 模板之过滤器
# {{objfilter_name:param}}
# default
# 如果一个变量是false或者为空 使用给定的默认值 否则使用变量的值
# {{valuedefault:'是空的'}}

# length
# 返回值的长度
# {{valuelength}}

# filesizeformat
# 格式化值 比如文件大小
# {{ filesizefilesizeformat }}

# date
# 格式化显示日期 时间
# {{ nowdate:"Y-m-d" }}

# slice 分割字符串
# {{strslice:'1:-1'}}

# truncatechars 设置仅显示指定长度字符串 注意... 要算三个字符
# {{ artictruncatechars:20 }}

# safe
# 为了安全 django模板中对html标签和js等语法标签进行自动转义
# 如果不需要转义 则需要使用过滤器safe 告诉django代码安全不需转义

# 模板之标签
# 语法
# {% tag %} ... {% endtag %}

# for标签
# {% for l1 in l %}
# <li>{{ l1 }}</li>
# {% endfor %}

# 反向循环使用 {% for l1 in l reversed %}

# 遍历字典
# {% for key,val in dic.items %}
# <p>{{ key }}:{{ val }}</p>
# {% endfor %}

# 循环中参数
# {{ forloop.counter }} 循环序号 从1开始
# {{ forloop.counter0 }} 循环序号 从0开始
# {{ forloop.revcounter }} 反向循环序号 结尾为1
# {{ forloop.revcounter0 }} 反向循环序号 结尾为0
# {{ forloop.first }} 是否是第一循环 返回布尔值
# {{ forloop.last }} 是否是最后一从循环 返回布尔值

# for ... empty标签
# { % for l1 in l %}
# ...
# { % empty %}
# <p> 为空 </p>
# { % endfor %}

# if标签
# {% if ... %}
# ...
# {% elif %}
# ...
# {% else %}
# ...
# {% endif %}

# with标签 起个别名
# {% with name2=person_list.2.eatting %}
# {{ name2 }}
# {% endwith %}

# csrf_token
# form表单中加 {% csrf_token %}

# 模板继承
# 语法
# {% block 钩子名 %}
# ...
# {% endblock %}

# 具体模板文件index.html
# 语法 extend
# {% extends "blog/base.html" %}
# {% block title %}
# Ropon运维-2018
# {% endblock title %}

# {% extends "blog/base.html" %} 必须放在模板最前面
# base母版中尽量定义多个钩子 模板没有定义将继承母版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title></head>
<body><h4>模板语法之变量</h4>
<p>{{ s }}</p>
<p>{{ l.1 }}</p>
<p>{{ dic.name }}</p>
<p>{{ riqi }}</p>
<p>{{ now.year }}</p>
<p>{{ person_list.1.name }}</p>
<p>{{ person_list.2.eatting }}</p>
<p>{{ testvardefault:'是空的' }}</p>
<p>{{ llength }}</p>
<p>{{ filesizefilesizeformat }}</p>
<p>{{ nowdate:"Y/m/d" }}</p>
<p>{{ strslice:'1:-1' }}</p>
<p>{{ artictruncatechars:20 }}</p>
<p>{{ linksafe }}</p>
<ul>{% for l1 in l %}
<li>{{ forloop.counter }} {{ l1 }}</li>{% endfor %}</ul>{% for key,val in dic.items %}
<p>{{ forloop.revcounter }} {{ key }}:{{ val }}</p>{{ forloop.first }} {% endfor %} {% for l1 in l %} {% empty %}
<p>为空</p> {% endfor %} {% if num > 100 or num < 0 %} <p>参数不正确</p> {% elif num > 80 and num < 100 %}
<p>A</p> {% else %} <p>B</p> {% endif %} {% with name2=person_list.2.eatting %} {{ name2 }} {% endwith %}
<form action="/app01/" method="post"> {% csrf_token %} <input name="user" type="text"> <input name="pwd"
type="password">
<button type="submit">提交</button>
</form>
</body>
</html>