zoukankan      html  css  js  c++  java
  • 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'   这时你的时间对象就会转为时间格式

      

             

  • 相关阅读:
    ASP.NET常见命名空间及其功能描述
    C#中的里氏替换原则
    Java中的split函数的用法
    shader之旅-7-平面阴影(planar shadow)
    OpenGL三角形的双面不同颜色的绘制
    MATLAB squeeze 函数
    matlab 常用函数汇总
    第一个OpenGL程序
    Github 留言系统
    Paging 简单自由的分页生成器
  • 原文地址:https://www.cnblogs.com/0627zhou/p/9760742.html
Copyright © 2011-2022 走看看