Django模板语言主要分为两部分:变量和标签,变量主要用来替换后台数据,标签主要来控制模板逻辑。
变量
变量在前端文档中表现为{{ variable }}
的形式,变量名是字母数字下划线的组合,使用.
来取后端传递过来的数据。并遵照字典查询、属性或方法查询、数字索引查询的查询顺序。
如果后端传递过来的是单个数据,前端直接使用{{}}替换。
如果传递是list, 则使用索引取值。
<ul>
<li>{{ lst.0 }}</li>
<li>{{ lst.1 }}</li>
<li>{{ lst.2 }}</li>
<li>{{ lst.3 }}</li>
</ul>
dict:
<div>{{ dic.name }} and {{ dic.age }}</div>
object:
<div>object cat She has a name: {{ cat.name }}
and now {{ cat.jumping }}
</div>
# 即便是对象方法,也是用 .method 取值, 而不是 .method()
过滤器
语法:{{ value|filter_name: 参数}}
常用过滤器
default
如果一个变量的值为false或者为空,使用给定的默认值。
{{变量|default:'给定的值'}}
#注意前后不要有空格,紧挨着写。
length
返回变量数据的长度。
{{变量|length}}
filesizeformat
讲变量数据大小格式化成‘可读’的文件尺寸。如:10kb
{{变量|filesizeformat}}
date
时间格式化
{{变量|data:"Y-m-d H:i:s"}}
safe
为了安全,django 模板会对HTML标签或js等语进行自动转义。如果我们想要在页面显示html标签或者js代码片段,需要告诉django这段代码是安全的,不必进行转义。即通过safe过滤器。
{变量|safe}
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。 参数:截断的字符数。
# ...也占三个字符位。
s = 'abcdefg'
{{ s|truncatechars:6}}
>>> abc...
标签
for
<ul>
{% for user in userInfo %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
for循环可以使用的一些参数:
for…empty
<ul>
{% for user in userInfo %}
<li>{{ user.name }}</li>
{% empty %}
<li>Null</li>
{% endfor %}
</ul>
if…elif…else
{% if user_list %}
用户人数:{{ user_list|length }}
{% elif black_list %}
黑名单数:{{ black_list|length }}
{% else %}
没有用户
{% endif %}
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
csrf-token
这个标签用于跨站请求伪造保护。
在页面的form表单里面写上{% csrf_token %}
模板继承
父模板
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
子模板
{% extends "base.html" %} # 一定要写在文件顶部
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
简单而言就是:在父模板中定义{% block 名称 % } ...{% endblock %}
表示可以被替换的块,在子模板中使用{% block 名称 % } ...{% endblock %}
使用对应的名称进行替换。
待续……