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来显示你确认过的安全的数据显示出来
      • <h2>{{ obj.ht_js|safe }}</h2>
        'ht_js':'<script>alert(123)</script>'
        这个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 import template
    #生成一个注册对象
   register = template.Library()

   #装饰器(告诉django自定义了一个filter)
   @register.filter()
   def adjust(value,arg):
    print(arg)
    return value + arg['name']

    在html文件中导入使用:

#导入自定义filter文件,跟import类似
{% load mytext %}

#adjust是装饰器函数,后面参数可以传入一个对象
<h3>{{ obj.name|adjust:obj }}</h3>

注意:在创建一个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

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

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 import template

# register:记录; 登记簿; 登记,注册; 自动记录器; vt. 登记
register = template.Library()


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

使用自定义simple tag

{% load mytest %}
<h1>{% text list key1=dict%}</h1>  #传入两个对象,分别在装饰器中处理,然后返回给模板

改时间的配置:

    1.settings中改   USE_L10N = False

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

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

  

         

原文地址:https://www.cnblogs.com/0627zhou/p/9760742.html