一、模板层之变量
在模板中变量的使用:
{{ 变量名 }}
from django.shortcuts import render
# Create your views here.
def test(request):
# 字符串
str = 'abc'
# 数值
number = 123
# 字典
dic = {'name': 'xcq', 'age': 18}
# 列表
lis = [1, 2, 3, 4]
# 元组
tu = (5, 6, 7, 8)
# 字典&列表
dic_list = ['a', 1, {'zxc': 'asd'}]
# 函数
def test1():
return 1
#类
class Student():
def __init__(self, name, age):
self.name = name
self.age = age
def study(self):
return '学习'
@classmethod
def eat(cls):
return 'cls'
#对象
xcq = Student('xcq',18)
return render(request, 'test.html', locals())
变量
{#字符串#}
<p>字符串:{{ str }}</p>
{#数值#}
<p>数值:{{ number }}</p>
{#字典#}
<p>字典:{{ dic }}</p>
{#列表#}
<p>列表:{{ lis }}</p>
{#元组#}
<p>元组:{{ tu }}</p>
{#字典&列表#}
<p>字典&列表:{{ dic_list }}</p>
{#类#}
<p>类:{{ Student }}</p>
{#函数#}
<p>函数:{{ test1 }}</p>
深度取值
{#列表取值#}
<p>列表取值:{{ lis.1 }}</p>
{#字典取值#}
<p>字典取值:{{ dic.name }}</p>
{#对象的数据属性#}
<p>对象的数据属性:{{ xcq.name }}</p>
{#对象的函数属性#}
<p>对象的函数属性:{{ xcq.study}}</p>
{#类的函数属性#}
<p>类的函数属性:{{ xcq.eat}}</p>
方法的使用
<p>方法的使用:{{ str.upper}}</p>
二、模板层之过滤器
语法
{{obj|filter__name:param}} 变量|过滤器名称:变量
常用过滤器
-length
作用:统计变量的长度,没有第二参数
语法:{{ 变量|length }}
-default
作用:变量是false或者为空,使用默认值。否则,使用变量的值
语法:{{ 变量|default:'默认值' }}
-slice
作用:切片,顾首不顾尾
语法:{{ 变量|slice:'起点:终点:步长(默认为1,可省略)' }}
-date
作用:如果变量=datetime.datetime.now(),转化时间格式
语法:{{ 变量|date:"Y-m-d"(时间格式) }}
-filesizeformat
作用:将值格式化为一个 “人类可读的” 文件尺寸,默认单位是B。比如{{ 1024|filesizeformat }} ===》 1KB
语法:{{ 变量|filesizeformat}}
-truncatechars
作用:将字符串以参数值截断制定的长度。截断的字符串的最后三位将以‘...’替换。
语法:{{ 变量|truncatechars:'截断的字符数' }}
-truncatewords
作用:将段落以参数值截断制定的长度。截断的段落的最后三位将以‘...’替换。
语法:{{ 变量|truncatewords:'截断的字符数' }}
-safe
作用:告诉模板吧,变量里的HTML标签和JS语法不要被转义,是安全的,可以使用的。
语法:{{ 变量|safe }}
三、模板层之标签
语法
{% 标签 %}
常用标签
for标签
语法:
{% for person in person_list %}
{{forloop}}
{% empty %}
{% endfor %}
作用:
empty: 当被循环的为空,执行之后的操作
forloop:
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(由1结束)
forloop.revcounter0 当前循环的倒序索引值(由0结束)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环
if 标签
语法:
{% if 条件 %}
内容
{% elif 条件 %}
内容
{% else %}
内容
{% endif %}
with标签
语法:
{% with 变量名 as 别名 %}
{% endwith %}
作用:
对于一些过长的变量,可以用with设置别名,在endwith之前都可以使用别名
注:标签不能用在for和if里
四、自定义标签和过滤器
#1 先app是不是已经在setting中注册
#2 在app下创建一个templatetags(****名字不能变***)的文件夹(模块)
#3 在模块下创建一个py文件,名字随意:mytag.py
#4 第一步,导入template
from django.template import Library
#第二步,定义一个叫register的变量=template.Library()
register = Library()
#5 自定义标签与过滤器
#自定义过滤器
@register.filter(name='yyy')#装饰一下(可以指定别名)
def str_add(str1, str2):
#一定要有返回值
return str1 + str2
#自定义标签
@register.simple_tag()
def add_nb(value):
return value+'nb'
#6 在模板里:(新定定义的标签,过滤器,都要重启程序)
#导入自定义的py文件
{% load mytag %}
#使用自定义过滤器
{{'lqz'|str_add:'nb'}}
#使用自定义标签
{% add_nb 'lqz' %}