• Django之模版层


    目录

    一、常用语法

    二、模版语法之变量

    三、模板之过滤器(Filters)

    【1】default

    【2】length

    【3】filesizeformat

    【4】slice

    【5】date

    【6】safe

    【7】truncatechars

    【8】其它过滤器(了解)

    四、模版之标签

    【1】for标签

    【2】if 标签

    【3】with

    【4】csrf_token

    五、模版导入和继承

    【1】模版导入

    【2】模版继承


    一、常用语法

    • 只需要记两种特殊符号:
    {{ }}和 {% %}
    • 变量相关的用{
    • 逻辑相关的用{%%}

    二、模版语法之变量

    • 在Django的模板语言中按此语法使用:
      • {{ 变量名 }}。
    • 当模版引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身。
    • 变量的命名包括任何字母数字以及下划线 ("_")的组合。
      • 变量名称中不能有空格或标点符号。
    • 在模板中取值的时候:使用的是点语法(.)
    • 模板中得函数调用的时候不要加括号,自动加括号,你只需要写函数名
    • Python的数据类型基本都支持放到模板中使用

    模板中支持的写法:

    1. {# 取l中的第一个参数 #}
    2. {{ l.0 }}
    3. {# 取字典中key的值 #}
    4. {{ d.name }}
    5. {# 取对象的name属性 #}
    6. {{ person_list.0.name }}
    7. {# .操作只能调用不带参数的方法 #}
    8. {{ person_list.0.dream }}

    三、模板之过滤器(Filters)

    过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可。

    语法:

    {{obj|filter__name:param}}  变量名字|过滤器名称:变量

    【1】default

    • 如果一个变量是false或者为空,使用给定的默认值。
    • 否则,使用变量的值。
    {{ value|default:"nothing"}}
    • 如果value没有传值或者值为空的话就显示nothing

    【2】length

    • 返回值的长度。它对字符串和列表都起作用。
    {{ value|length }}
    • 返回value的长度
      • 如 value=['a', 'b', 'c', 'd']的话,就显示4。

    【3】filesizeformat

    • 将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。
    {{ value|filesizeformat }}
    • 如果 value 是 123456789,输出将会是 117.7 MB。

    【4】slice

    • 切片
      • 如果 value=”hello world”
    {{ value|slice:"2:-1"}}

    【5】date

    • 格式化
      • 如果 value=datetime.datetime.now()

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

    【6】safe

    • Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。
      • 但是有的时候我们可能不希望这些HTML元素被转义
      • 比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。
    • 为了在Django中关闭HTML的自动转义有两种方式
      • 如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
    • 比如:
    • value = "点我"
    value="">点我"
    1. {{ value|safe}}
    2. from django.utils.safestring import mark_safe
    3. res = mark_safe('

      HELLO WORLD

      '
      )

    【7】truncatechars

    • 如果字符串字符多于指定的字符数量,那么会被截断。
      • 截断的字符串将以可翻译的省略号序列(“...”)结尾。
    • 参数:截断的字符数
    {{ value|truncatechars:9}}

    【8】其它过滤器(了解)

    过滤器

    描述

    upper

    以大写方式输出

    add

    给value加上一个数值

    addslashes

    单引号加上转义号

    capfirst

    第一个字母大写

    center

    输出指定长度的字符串,把变量居中

    cut

    删除指定字符串

    date

    格式化日期

    default

    如果值不存在,则使用默认值代替

    default_if_none

    如果值为None, 则使用默认值代替

    dictsort

    按某字段排序,变量必须是一个dictionary

    dictsortreversed

    按某字段倒序排序,变量必须是dictionary

    divisibleby

    判断是否可以被数字整除

    escape

    按HTML转义,比如将”<”转换为”<”

    filesizeformat

    增加数字的可读性,转换结果为13KB,89MB,3Bytes等

    first

    返回列表的第1个元素,变量必须是一个列表

    floatformat

    转换为指定精度的小数,默认保留1位小数

    get_digit

    从个位数开始截取指定位置的数字

    join

    用指定分隔符连接列表

    length

    返回列表中元素的个数或字符串长度

    length_is

    检查列表,字符串长度是否符合指定的值

    linebreaks

    用或标签包裹变量

    linebreaksbr

    用标签代替换行符

    linenumbers

    为变量中的每一行加上行号

    ljust

    输出指定长度的字符串,变量左对齐

    lower

    字符串变小写

    make_list

    将字符串转换为列表

    pluralize

    根据数字确定是否输出英文复数符号

    random

    返回列表的随机一项

    removetags

    删除字符串中指定的HTML标记

    rjust

    输出指定长度的字符串,变量右对齐

    slice

    切片操作, 返回列表

    slugify

    在字符串中留下减号和下划线,其它符号删除,空格用减号替换

    stringformat

    字符串格式化,语法同python

    time

    返回日期的时间部分

    timesince

    以“到现在为止过了多长时间”显示时间变量

    timeuntil

    以“从现在开始到时间变量”还有多长时间显示时间变量

    title

    每个单词首字母大写

    truncatewords

    将字符串转换为省略表达方式

    truncatewords_html

    同上,但保留其中的HTML标签

    urlencode

    将字符串中的特殊字符转换为url兼容表达方式

    urlize

    将变量字符串中的url由纯文本变为链接

    wordcount

    返回变量字符串中的单词数

    四、模版之标签

    • 标签看起来像是这样的: {% tag %}
    • 标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。
    • 一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})

    【1】for标签

    遍历每一个元素:

    1. {% for person in person_list %}
    2. {{ person.name }}

    3. {% endfor %}
    4. # 可以利用{% for obj in list reversed %}反向完成循环。

    遍历一个字典:

    1. {% for key,val in dic.items %}
    2. {{ key }}:{{ val }}

    3. {% endfor %}
    4. {% for foo in d.keys %}
    5. {{ foo }}

    6. {% endfor %}
    7. {% for foo in d.values %}
    8. {{ foo }}

    9. {% endfor %}
    10. {% for foo in d.items %}
    11. {{ foo }}

    12. {% endfor %}

    注:循环序号可以通过{{forloop}}显示

    1. # for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
    2. {% for person in person_list %}
    3. {{ person.name }}

    4. {% empty %}
    5. sorry,no person here

    6. {% endfor %}

    【2】if 标签

    • {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。
    • if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
    1. {% if num > 100 or num < 0 %}
    2.    

      无效

    3. {% elif num > 80 and num < 100 %}
    4.    

      优秀

    5. {% else %}
    6.    

      凑活吧

    7. {% endif %}

     【3】with

    • 定义一个中间变量,多用于给一个复杂的变量起别名。
    • 注意等号左右不要加空格。
    1. d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,
    2. 333,{'info':'NB'}]}
    3. # with起别名
    4. {% with d.hobby.3.info as nb %}
    5. {{ nb }}

    6. with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
    7. {{ d.hobby.3.info }}

    8. {% endwith %}
    9. {% with total=business.employees.count %}
    10. {{ total }} employee{{ total|pluralize }}
    11. {% endwith %}
    12. 不要写成as

    【4】csrf_token

    {% csrf_token%}

    五、模版导入和继承

    【1】模版导入

    1. 语法:{% include '模版名称' %}
    2.   如:{% include 'adv.html' %}

    母板

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="x-ua-compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1">
    7. <title>Titletitle>
    8. {% block page-css %}
    9. {% endblock %}
    10. head>
    11. <body>
    12. <h1>这是母板的标题h1>
    13. {% block page-main %}
    14. {% endblock %}
    15. <h1>母板底部内容h1>
    16. {% block page-js %}
    17. {% endblock %}
    18. body>
    19. html>

    注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。 

    【2】模版继承

    • 在子页面中在页面最上方使用下面的语法来继承母板。
    {% extends 'layouts.html' %}

     块(block)  

    • 通过在母板中使用{% block xxx %}来定义"块"。
    • 在子页面中通过定义母板中的block名来对应替换母板中相应的内容。
    1. {% block page-main %}
    2. <p>世情薄p>
    3. <p>人情恶p>
    4. <p>雨送黄昏花易落p>
    5. {% endblock %}

    组件

    • 可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
    {% include 'navbar.html' %}
  • 相关阅读:
    学生党双11有哪些值得入手的蓝牙耳机?适合学生党的蓝牙耳机推荐
    Java实现管线拓扑关系连通性分析
    MySQL实现事务隔离的原理
    软件测试 遇到bug却无法重现怎么办?
    【DW组队学习—Wonderful SQL】集合运算
    linux安装ES
    Tools-反射
    基于JSP技术的猎头公司管理软件的设计和实现——内部事务部分(源代码+论文)
    使用 frp 实现 windows 远程
    集群、分布式、微服务的区别和介绍
  • 原文地址:https://blog.csdn.net/qq_53842456/article/details/134420024