python模板语言_django的模板语言

Django模板语言

1.基础语法:

return render(request,'qwe.html',{'obj':obj}),render的最后的字典可以以键值对的形式传入多个值,

在django模板中只用到两种符号

变量相关:{{变量名}}  逻辑相关:{% %}

1)变量相关:

a: 变量名有字母数字和下划线组成,(.)用来获取对象的属性值,ls.0 --> ls[0] dic.key --> dic[key]

注意事项:

.只能调用不带参数的方法

当模板系统遇到一个.时,会按照如下的顺序去查询:

1.在字典中查询  2.属性或则方法  3.数字索引

b: Filters:过滤器,用来修改变量的显示结果;

语法:{{value|filter_name:参数}} 管道符'|'前后不能添加空格,参数':'前后也没有,要想加上,必须加上引号

几个常用的过滤器:

default:如果value值没有传,就会显示默认值nothing

{{ value|default:'nothing' }}

注:在django项目里settings.py文件里的TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid里设置跟default的作用一样;

filesizeformat:将值格式化为一个'人类可读的'文件尺寸(KB,MB,byte)

{{ obj.file_size|filesizeformat }}

length:返回值的长度,作用于字符串和列表

{{ value|length }}

slice:切片,跟Python里的切片一样

{{ value|slice:'2:-1' }}

date:时间格式化(传入的对象为:datetime.datetime.now())

{{ value|date:'Y-m-d H:i:s'}}

save:django的模板中在往数据库提交数据时,会自动对一些不符合的数据(html标签或js代码等语法)进行转义,为了源html文件不被破坏,但有一些可能不需要转义,所以django用过滤器save来显示你确认过的安全的数据显示出来

{{ obj.ht_js|safe }}

'ht_js':''

这个js代码就会被执行

truncatewords:在6个数量的字后截取其后字体用三个点代替

{{ value|truncatewords:6 }}

cut:移除value所有的cut后面参数的字符串

{{ value|cut:' ' }}移除空格

timesince:传入的时间对象跟当前的时刻的时间的一个时间差,用于写多长时间之前

{{ value|timesince }}

timeuntil:当前时间对未来的时间的一个时间差,多长时间之后

{{ conference_date|timeuntil:from_date }}

c:自定义filter:自定义过滤器只是带有一个或两个位置参数的Python函数,所以不能用*args或**kwargs

创建filter的步骤:

在django项目中的app01下的文件夹中

创建一个templatetags包(package),在该包下创建一个py文件,来写自定义的filter函数

app01/templatetags/mytext--

#导入template

from django importtemplate#生成一个注册对象

register =template.Library()#装饰器(告诉django自定义了一个filter)

@register.filter()defadjust(value,arg):print(arg)return value + arg['name']

在html文件中导入使用:

#导入自定义filter文件,跟import类似

{% load mytext %}

#adjust是装饰器函数,后面参数可以传入一个对象

{{ obj.name|adjust:obj }}

注意:在创建一个filter对象时,都要重启一下

tags:

for循坏可用的一些参数:forloop本身是一个字典,属性用如下几项:

VariableDescription

forloop.counter

当前循环的索引值(从1开始)

forloop.counter0

当前循环的索引值(从0开始)

forloop.revcounter

当前循环的倒序索引值(从1开始)

forloop.revcounter0

当前循环的倒序索引值(从0开始)

forloop.first

当前循环是不是第一次循环(布尔值)

forloop.last

当前循环是不是最后一次循环(布尔值)

forloop.parentloop

本层循环的外层循环

for...empty

  • {% for user in user_list %}
  • {{ user.name }}{% empty %} 循环过程结束,没有符合的条件
  • 空空如也{% endfor %}

if,elif和else:

{% if user_list|length > 5 %}

七座豪华SUV

{% else %}

黄包车

{% endif %}

if语句支持and, or , == ,,<=,>=,in,not in,is,is not判断,但不支持连续判断

例如:a>b>c这是Python里可以实现,但是在模板语言里写连续判断格式: a>b and b>c

with:修改变量名称,重命名

{% with total=business.employees.count %}

{{ total }} employee{{ total|pluralize }}

{% endwith %}

csrf_token:

这个标签用于跨站请求伪造保护(当你开启一个服务的时候,别人也可以用自己的文件通过浏览器向你发送请求,有可能是恶意的)

所以django添加了csrf用来唯一确定是提交的表单是本页面发出的;

在页面(html文件)上form表单下写上

{% csrf_token %}

会在表单上添加隐藏的input框(里面是一个64位的随机数)

自定义simpletag:

和filter类似,都是在模板(html)中接收到数据时,可以对其过滤(操作,加功能,给模板变量加装饰器)

不同的是,filter只能接收1个或2个参数,而simpletag可以接收多个参数;

定义注册simple tag:

from django importtemplate#register:记录; 登记簿; 登记,注册; 自动记录器; vt. 登记

register =template.Library()

@register.simple_tagdef text(*args,**kwargs):print(args)return args,kwargs

使用自定义simple tag

{% load mytest %}

{% text list key1=dict%}

#传入两个对象,分别在装饰器中处理,然后返回给模板

改时间的配置:

1.settings中改   USE_L10N = False

2.DATETIME_FORMAT = 'Y-m-d H:i:s'

DATE_FORMAT = 'Y-m-d'   这时你的时间对象就会转为时间格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值