模板语法之变量:
-- 变量:相当于print打印了该变量
-深度查询-----》统一都用句点符
{模板语言注释:前端看不到}{相当于print了该变量}模板语言之变量
字符串:{
{ name }}数字:{
{ age }}列表:{
{ ll }}元祖:{
{ tu }}字典:{
{ dic }}{只写函数名:相当于函数名(),执行该函数}函数:{
{ test }}{对象内存地址}对象:{
{ lqz }}列表套对象:{
{ person_list }}字典套对象:{
{ person_dic }}深度查询
列表第0个值:{
{ ll.0 }}列表第3个值:{
{ ll.3 }}字典取值:{
{ dic.name }}字典取列表值:{
{ dic.ll }}{再继续取值,继续点}对象取数据属性:{
{ lqz.name }}对象取绑定给对象的函数属性:{
{ lqz.get_name }}对象取绑定给类的函数属性:{
{ lqz.cls_test }}对象取静态方法:{
{ lqz.static_test }}把对象列表中egon年龄取出来:{
{ person_list.1.age }}{拓展:不能调有参数的方法}字符串的方法:{
{ name.upper }}
模板之过滤器
--语法:{ {第一个参数/过滤器的名字:第二个参数}}--常用过滤器:
-length
-default
-slice
-data
-filesizeformat
-truncatechars
-truncatewords
-safe
-add
模板语言之过滤器
{后面就是个python中的函数,|前面的,是函数的第一个参数,冒号后面的是第二个参数}统计字符串长度:{
{ name|length }}统计列表长度:{
{ ll|length }}过滤器之默认值:{
{ ll2|default:'没有值' }}过滤器之filesizeformat--1:{
{ 2013344444444444444444444445555444444444444444444444444444444444444444444444444444444444443|filesizeformat }}过滤器之filesizeformat--2:{
{ file_size|filesizeformat }}过滤器之不使用date:{
{ ctim }}过滤器之date:{
{ ctim|date:'Y-m-d' }}{前闭后开区间}过滤器之slice:{
{ ll|slice:'2:-1' }}{支持步长}过滤器之slice-字符串:{
{ name|slice:'0:3:3' }}{三个起步}过滤器之truncatechars:{
{ 'dafddfafgadfgaasdgadgfadaf'|truncatechars:5 }}过滤器之truncatewords:{
{ '我 dfaf ga dfgaas 你 dgf adaf'|truncatewords:5 }}过滤器之不用safe:{
{ h1 }}过滤器之用safe:{
{ h1|safe }}过滤器之不用safe:{
{ script }}{过滤器之用safe:{
{ script|safe }}}过滤器之用add:{
{ 12|add:'1' }} { 数字增加}过滤器之用add:{
{ 'egon'|add:'dsb' }}
class Person(): def __init__(self, name, age): self.name = name self.age = age def get_name(self): return self.name @classmethod def cls_test(cls): return 'cls' @staticmethod def static_test(): return 'static' 模板里不支持带参数 def get_name_cs(self,ttt): return self.name lqz=Person('lqz',18) egon=Person('egon',18) person_list=[lqz,egon] person_dic={ 'lqz':lqz} file_size=1024 import datetime ctim=datetime.datetime.now()
-{% 标签 %} -for:forloop:对象(里面有好多东西:parentloop,last,first,counter....) empty:被循环的对象是空,才走它 for循环可以嵌套,也可以用if -if: {% if forloop.first %}第一次的我
{% elif forloop.last %}最后的我
{% else %}{ { foo }}
吧 {% endif %} -with:重命名,应用在变量名过长 ********都要有结束********
模板语言之标签
{ {% for foo in ll %}}{ { { forloop }}}{{
{ forloop.first }}--->{ { forloop.counter0 }}--->{ { forloop.revcounter }}----->{ { foo }}}{ {% endfor %}}{ {% for foo in ll %}}{ {% for i in person_list %}}{ 取出外层是第几次循环}{ { { forloop.parentloop.counter }}}{{
{ forloop.first }}--->{ { forloop.counter0 }}--->{ { forloop.revcounter }}----->{ { foo }}}{ {% endfor %}}{ {% endfor %}}{**************循环的对象是空,才会走到empty,而不是对象里面的东西为空}{ {% for foo in dic2 %}}{{
{ foo }}}{ {% empty %}}{ 傻逼了}{ {% endfor %}}{只循环字典的话,取到的是key值}{ {% for foo in dic %}}{取到value的值}{ {% for foo in dic.values %}}{取到key 和 value的值}{ {% for k,foo in dic.items %}}{{
{ k }}----->{ { foo }}}{ {% empty %}}{ 傻逼了}{ {% endfor %}}{ {% if user %}}{ 退出}{ {% else %}}{ 登录}{ 注册}{ {% endif %}}{for循环判断如果是第一次,打印第一次,其他打印正常值}{% for foo in ll %} {% if forloop.first %}第一次的我
{% elif forloop.last %}最后的我
{% else %}{
{ foo }} {% endif %}{% endfor %}
{with 相当于取别名,作用:变量太长,可以简化}{ {% with name as ttt %}}{ { { ttt }}}{ { { name }}}{ { { user }}}{}{ {% endwith %}}------{% with dic.ll.2 as ttt %} { { ttt }} { { ttt }}{% endwith %}
标签不能用在if判断,过滤器,可以用在if判断 -自定义过滤器 -1 先app是不是已经在setting中注册 -2 在app下创建一个templatetags(****名字不能变***)的文件夹(模块) -3 在模块下创建一个py文件,名字随意:mytag.py -4 # 第一步,导入template from django.template import Library # 第二步,定义一个叫register的变量=template.Library() r egister = Library() -5 写一个函数,用@register.filter(name='yyy')装饰一下(可以指定别名) def str_add(str1, str2): #一定要有返回值 # 业务逻辑很复杂 return str1 + str2 -6 在模板里:(新定定义的标签,过滤器,都要重启程序) -{% load mytag %} -{ {'lqz'|str_add:'nb'}} -自定义标签: -1-4:前4步,根过滤器的定义完全一样 -5 只是装饰器不一样 @register.simple_tag() def add_nb(value): return value+'nb' -6 在模板里:(多个参数,以空格区分) -{% load mytag %} -{% add_nb 'lqz'%}