01基本用法
- 变量:{{ }}
- 1 深度查询 句点符
- 2 过滤器
- 标签:{% %}
02变量
-
html文件中用{{ 变量名 }}做占位符
-
views.py中通过render第三个参数传入字典类型的变量 { “变量名” : 值 }
def timer(request):
import datetime
date1 = datetime.datetime.now()
date = date1.strftime("%Y-%m-%d %H:%M:%S")
return render(request, "timer.html", {'date': date})
如果需要传入的变量过多时,可以直接把字典换成 locals(),
可以自动全部传入,但是注意,传入的键和值的名字一样
深度查询01
<p>{{ l.1 }}</p> // 变量为列表,通过列表名.索引
<p>{{ info.name }}</p> // 变量为字典,通过字典.键
<p>{{ alex.name }}</p> // 变量为类的对象,通过对象.属性
<p>{{ alex.age }}</p> // 变量为类的对象
# 不管有几层都可以用"."来实现查询
过滤器02
{{ obj:filter_name:param }}
# default
# 如果一个变量是false或者为空,使用给定的默认值,否则,使用变量值
{{ value|default:"nothing" }}
# length
# 返回值的长度,他对字符串和列表都起作用
# filesizeformat
# 将值格式化为一个“人类可读的”文件尺寸,( 4.1 MB,102 bytes等)
# date
# 如果value=datetime.datetime.now()
{{ value|date:"Y-m-d" }}
# slice
# 切片
{{ value|slice:"2:-1" }}
# truncatechars/truncatewords
# truncatechars 如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以"..."结尾
# truncatewords 如果字符串单词多于指定的单词数量,那么会被截断。截断的字符串将以"..."结尾
{{ yours|truncatechars:5 }}
{{ yours|truncatewords:2 }}
# safe
# 正常不加 safe 的话Django遇到变量内容是标签一类的会渲染成特殊符号传给浏览器
# 如果加上 safr 就告诉django该内容是安全的可以直接渲染成标签
{{ link|safe }}
03 标签
{% %}
- for循环标签
{# for循环 #}
{% for i in li %}
<p>{{ i }}</p>
{% endfor %}
{% for i,j in dic %}
<p>{{ i }} {{ j }}</p>
{% endfor %}
for循环中放入{{ forloop.counter }}加入计数
{% for i in dic %}
<p>{{ forloop.counter }} {{ i }}</p>
{% empty %} {# 如果列表非空就执行上面的,否则执行empty和下面的p标签 #}
<p>列表为空</p>
{% endfor %}
- if标签‘
{% if user %}
<p>
<a href=''>hi {{ user }}</a>
<a href=''>注销</a>
</p>
{% else %}
<p>
<a href=''>登录</a>
<a href=''>注册</a>
</p>
{% endif %}
-
with标签
-
使用一个简单的名字缓存一个复杂的变量;
-
{% with person_list.1.name as n %} {{ n }} {{ n }} {{ n }} {% endwith %}
-
-
csrf_token标签
-
这个标签用于跨站请求伪造保护
-
因为你没有这个标签但是提交请求的话,服务器会给你拦截不允许你发POST请求
-
而添上这个之后服务器识别到你有这个标签的"身份证号"就会允许你发POST请求
-
<form actioin="" menthod="post"> {% csrf_token %} <input type="text" name="user"> <input type="submit"> </form>
-
04自定义标签和过滤器
-
首先在settings中INSTALLED_APPS配置当前的app,不然django找不到自定义simple_tag
-
在app中创建templatetags模块(库文件夹)只能叫templatetags
-
在新建的库中创建任意.py文件,这里名为my_tag_filter
-
# 自定义过滤器 from django import template register = template.Library() @register.filter def multi_filter(x, y): return x*y
-
# 自定义标签 from django import template register = template.Library() @register.simple_tag def multi_tag(x, y): return x*y
-
-
在需要使用自定义过滤器的文件导入方法
-
{% load my_tag_filter %} <p> {{ i|multi_filter:20 }} </p>
-
-
特点:自定义过滤器最多可以传入两个参数,而自定义标签没有限制
-
05继承
{# 引入一段HTML代码(这些代码存放在一个单独的文件中,不是完整的HTML文件) #}
{% include "advertise.html" %}
{# 相当于外部引入一段代码,但不是继承 #}
真正的继承标签
// 模板HTML
{% block 盒子名 %} // 给要继承的文件,留扩展代码的盒子
{% endblock %}
{# 在模板HTML的可扩展部分中加入block标签,继承之后的文件就可以在该区域扩展 #}
{# 在模板HTML的可扩展部分中加入block标签,继承之后的文件就可以在该区域扩展 #}
{% extends "base.html" %} // 继承
{% block 盒子名 %} // 添加该盒子HTML代码
{% endblock %}
{% block 盒子名 %} // 添加该盒子HTML代码
{{ block.super }} // 继承base盒子中的内容,并且续写。如果不加这个就会覆盖base中的内容。
...
{% endblock %}
