什么是模板:
html加模板语法
模板语法
变量:
形式:{{variable}}
深度查询:使用句点符号“.”
过滤器:{{variable|filter_name}}
过滤器:
default(没有值,或者标签找不到时显示默认):{{var|default:”啥也没有”}};
length(值的长度):{{var|length}};
filesizeformat(将值格式化为一个”人类可读的”文件尺寸 ):{{var|filesizeformat}},形如:{{ ‘1234567’|filesizeformat }}
date(格式化时间):{{var|date:’Y-m-d’}},var不能是字符串!!!
slice(切片):{{var|slice:’2:-1’}};
truncatechars(截断字符):{{var|truncatechars:’20’}}
safe(告诉浏览器此段代码安全,无需转义):{{var|safe}}
{{ '<h6>hello geek!</h6>'|safe }}
标签
形式:{% tag %},tag包含:if、for、csrf_token、url
具体和特殊表现:
##for标签
#reversed反向遍历,如果需要获取循环序号则使用forloop
#如果查询的对象为空则会走到empty标签
{% for common in common_list reversed%}
<p>{{forloop}}===>{{ common }}</p>
{% empty %}
<p>对不起,数据为空</p>
{% endfor %}
##if标签
#可以使用if标签进行逻辑判断,注意符号之间要用空格隔开
{% if a > 10 %}
<p>牛</p>
{% elif a < 10 %}
<p>衰</p>
{% else %}
<p>一般</p>
{% endif %}
##with标签
#with标签可以起别名,两种形式:等号左右不能有空格!!!as比较好用
#形式一,输入with敲Tab键就能出来;
{% with common_list as abc %}
<p>{{ abc }}</p>
{% endwith %}
#形式二,手动输入;
{% with abc=common_list %}
<p>{{ abc }}</p>
{% endwith %}
##csrf_token
#预防跨站攻击,个人觉得没啥卵用
{% csrf_token %}
列表解析:
common_list = [11, 22, 33]
<p><a href="">{{ common_list.0 }}</a></p>
<p><a href="">{{ common_list.1 }}</a></p>
<p><a href="">{{ common_list.2 }}</a></p>
{#列表解析#}
<p>
<ul>
{% for foo in common_list %}
<li>{{ foo }}</li>
{% endfor %}
</ul>
</p>
对象解析:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
#需要有return返回值
def run(self):
return '%s is running' % self.name
Alex = People('alex', 18)
<p>{{ Alex.name }}</p>
#绑定方法要这么调用,不要加括号
<p>{{ Alex.run }}</p>
自定义变量和标签
自定义步骤:
1.在settings.py中的INSTALLED_APPS注册应用;
2.在注册的应用中创建名为templatetags包,注意包名固定不能修改;
3.在templatetags中自定义一个py文件;
4.在该自定义的py文件中导入以下模块:
>from django import template
>from django.utils.safestring import mark_safe
>register = template.Library()#register固定写法,不可改变
5.在该py文件中自定义函数完成需要实现的功能;
6.给该自定义函数添加装饰器,形如:@register.filter或者@register.simple_tag;
7.{% load 自定义py文件的名字%}
8.调用该自定义的filter或者tag
自定义filter和自定义tag区别:
自定义filter:
优点:可以与if标签连用
缺点:只能传一个参数,自定义时需要写两个形参
自定义tag:
优点:可以传多个参数,没有限制
缺点:不能与if标签连用
自定义过滤器和标签必须要有返回值
from django import template
from django.utils.safestring import mark_safe
# 名字必须为register
register = template.Library()
# 自定义过滤器
@register.filter
def format_str(a, b):
return a + "=%=" + b
# 自定义标签
@register.simple_tag
def my_tag(a, b, c):
return a * b * c
{% if '123'|format_str:'456' == '123=%=456' %}
<p>Hello Geek!</p>
{% else %}
<p>wtf</p>
{% endif %}