• 小谈Django中的模板系统


    Django的模板系统

    常用语法

    Django模板中只需要记住两种特殊符号 : {{ }}和{% %} ;

    {{ }}表示变量 , 在模板渲染的时候替换成值 ; {% %} -- "标签"( tag ) : 表示逻辑相关的操作 ;

    变量

    注意 :

    • 变量中都是通过.来取相关的内容 , 模板语法中没有[ ]和( ) ;
    • 取索引 : 直接 .数字, 如{{ lst.0 }} ; 如果超出索引范围就是不显示 , 不报错 ; 但是索引值为负数时会报错 , 如{{ lst.-1 }}
    • 字典取值 : 直接.键 , 如{{ dic.name }} ; 字典取键 : 直接.keys , 如{{ dic.keys }}
    • 对象取属性或方法 : 都是直接.属性/方法 ,如{{ obj.name }} 或者 {{ obj.run }} ; 调用对象的方法时 , 只能调用不带参数的方法 ;
    • 当模板系统遇到一个.时 , 会按照如下的顺序取查询 ( 如类和字典或者列表重名时 ) :
      • 在字典中查询
      • 属性或者方法中查询
      • 数字索引中查询

    过滤器 - Filters

    Filters翻译过来叫过滤器 , 用来修改变量的显示结果 ;

    语法: {{ value | filter_name:参数 }} ; 参数最多只有一个(可以没有), 并且 : 两边没有空格!!!!!

    default

    default的意思:xxx是变量,如果没有这个变量或者变量为空(空列表,空字典,None都是空)时,用default的值;如果变量本身有值,就显示自己的值 ;

    {{ xxx|default:'没有传参' }}
    

    filesizeformat

    这个过滤器没有参数,filesize:'文件大小',比如定义filesize=100,加上这个过滤器就显示100bytes,如果数值较大会自动更新为合适的单位,最大显示到PB ;

    {{ filesize|filesizeformat }}
    

    add

    1. 加法 : 参数可以是正数也可以是负数;参数写成字符串('-11')也可以,会硬转化成整数再去加 ;

      {{ age|add:-11 }}
      
    2. 拼接 : 变量和参数都是字符串,就是字符串的拼接;如果变量和参数都是列表就是列表的拼接 ;

      {{ string|add:' is dsb' }}
      

    lower

    所有字母都变成小写 ;

    {{ string|lower }}
    

    upper

    所有字母都变成大写 ;

    {{ string|upper }}
    

    length

    显示长度,这里:列表加上自己再显示其长度,就显示hobby_list长度的2倍 ;

    {{ hobby_list|add:hobby_list | length }}
    

    slice

    切片,''中写的内容和Python中[]里面写的内容相同 ;

    {{ hobby_list|slice:'::2' }}
    

    first

    取第一个元素 ;

    {{ hobby_list|first }}
    

    last

    取最后一个元素 ;

    {{ string|last }}
    

    join

    将列表中的元素按照什么拼接 ;

    {{ hobby_list|join:'-' }}
    

    truncatechars

    显示多少字符长度的内容,最后显示的...也计入10之中,也就是说如果参数是3,那就显示三个点了 ;

    {{ long|truncatechars:10 }}
    

    truncatewords

    显示多少单词长度的内容,按空格分 ;

    {{ long|truncatewords:10 }}
    

    date

    日期时间格式化 ;

    1. 这个日期时间格式化之后显示的就是按照这个格式(如:'2017-01-01 12:12:12') ;

      {{ now|date:'Y-m-d H:i:s' }}
      
    2. 如果在settings.py中把USE_L10N = False 再加一行:DATETIME_FORMAT = 'Y-m-d H:i:s' 这样的效果和格式化之后的一样,如果前端页面需要格式化的变量比较多时可以选择这个:这里还可以只格式化日期或者只格式化时间:DATE_FORMAT和TIME_FORMAT ;

    3. 如果不用格式化,只修改settings.py中的语言和时区就是显示成'2017年01月01日 12:12:12'

    safe

    Django的模板中会对HTML标签和JS等语法标签进行自动转义 , 但是有时候我们不希望这些HTML元素被转义 , 这里就是使用safe

    value = '<a href="http://www.baidu.com">百度</a>'
    {{ value|safe }}
    

    模板的标签

    用{% %}表示的就是标签

    for循环

    # {{ forloop.counter0 }} 0,1,2 从0开始
    # {{ forloop.revcounter }} 3,2,1
    # {{ forloop.revcounter0 }} 2,1,0 到0结束
    # {{ forloop.first }} 第一个是True,其余都是false ; lase反之
    # {{ forloop.parentloop }} 本层循环的外层循环的变量
    # {% empty %} 有数据显示数据,没有数据时可以自定义显示内容
    <ui>
        {% for hobby in hobby_list %}
            <li>{{ forloop.counter }} {{ hobby }}</li>
        {% empty %}
        	<li>没有数据</li>
        {% endfor %}
    </ui>
    

    if...else

    if...else : 有些情况并不支持 , 这里举例说明

    不支持算数运算
    #  1+1>1,无法完成,要借助于过滤器
    {% if 1|add:1 > 1 %}
    	真
    {% edif %}
    
    不支持连续判断
    # 不支持连续判断
    # 说明: 10>5>1 在Python中显示为True(10>5:True,5>1:True;两个True取交集所以成立);而模板语法类似于JS(10>5为True,True>1就是False)
    

    with

    相当于取别名 , 只能在with范围内使用 : 可以将一些临时用的比较频繁 , 名称又比较复杂的变量用with取别名 ;

    {% with ... as ... %} # 这行也可以写成 : {% with ...=... %}
        ...
    {% endwith %}
    

    csrf_token

    这个标签可以跨站请求伪造保护 ;

    在前端页面的form表单里面写上{% csrf_token %} , 在form表单中有一个隐藏的input标签 name='csrfmiddlewaretoken' value是一直在变的

    母版和继承

    母版

    提取多个页面公共部分放在一个母版中 , 定义上多个block块 , 让子页面重新复写

    继承

    1. {% extends '母板的名字' %} ;
    2. 重写block块 ;
    # 母版 --> index.html
    {% block content %}
    	可以被替换的内容
    {% endblock %}
    
    # 继承页面中
    {% extends 'index.html' %}
    
    {% block content %}
    	替换成自己的内容
    {% endblock %}
    

    注意 :

    1. {% extends '母板的名字' %} 模板名字的引号必须加上 , 不加引号会被当作变量 ;
    2. {% extends '模板的名字' %} 的上面不要写内容 ;
    3. 要替换母版的内容都放在block块中 ;
    4. 可以定义多个block块 ;

    组件

    {% include '组件名称' %}

    可以将常用的页面内容( 一小段代码段 ) , 如导航条,页面信息等组件保存在单独的html文件中 , 然后在需要使用的地方按如下语法导入即可 .

    {% include 'nav.html' %}
    

    注意 :

    1. 导入组件时 , 如果组件需要导入bootstrap , 需要在页面另行导入 ;
    2. 母版如果导入了组件 , 继承母版的页面不用再另行导入组件 ;

    {% load static %}

    用上{% load static %} 就不用担心settings.py中的STATIC_URL = '/static/'修改名字了 ;

    {% load static %}
    # 页面中导入css,js的上面写上{% load static %},导入时可以这样写
    # {% static 'css/js等静态文件的相对路径' %} 如下面:
    <link rel='stylesheet' href="{% static 'plugins/bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
    

    {% get_static_prefix %}

    {% get_static_prefix %} 就是获取settings.py中的STATIC_URL = '/static/' 的'/static/' , 如果需要单独使用一次STATIC_URL的值 , 可以用这个 ,了解即可 .

  • 相关阅读:
    如何通过转换例程加减前导0
    PA教材提纲 TAW12-2
    Web开发框架趋势
    ASP.NET MVC
    一步步实现Promise
    在Jenkins中使用Git Plugin访问Https代码库失败的问题
    5年从DBA到运维架构总监 — 做对了什么
    Hello又大了一岁
    JavaWeb限流QPS简易框架
    JAVA异常使用_每个人都曾用过、但未必都用得好
  • 原文地址:https://www.cnblogs.com/richard_A/p/13804856.html
Copyright © 2020-2023  润新知