django模板

官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#

目录:

  1. 常用格式
  2. 模板过滤器
  3. 模板的for循环
  4. 模板继承

常用格式

{{  }}和 {% %}
变量相关的用{{}},逻辑相关的用{%%}。

模板变量的命名规则:

变量的命名包括任何字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。

注意:点(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以这样的顺序查询:

  1. 字典查询(Dictionary lookup)
  2. 属性或方法查询(Attribute or method lookup)
  3. 数字索引查询(Numeric index lookup)

注意:

  • 如果值是可调用的,它将被无参数的调用。 调用的结果将成为模版的值。
  • 如果使用的变量不存在, 模版系统将插入 string_if_invalid 选项的值, 它被默认设置为’’ (空字符串) 。

模板中支持的语法

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

回到目录



模板过滤器

语法格式

 {{ value|filter_name:参数 }}

常用过滤器

  • default 设置默认值

    {{ value|default: “nothing”}}
    如果value值没传的话就显示nothing

  • length 返回value的长度

    {{ value|length }}
    注意:’|'左右没有空格没有空格没有空格
    如 value=[‘a’, ‘b’, ‘c’, ‘d’]的话,就显示4.

  • filesizeformat 将值格式化为一个 “人类可读的” 文件尺寸 (例如 ‘13 KB’, ‘4.1 MB’, ‘102 bytes’, 等等)

    例如:
    {{ value|filesizeformat }}
    如果 value 是 123456789,输出将会是 117.7 MB。

  • slice 切片

    {{value|slice:“2:-1”}}

  • date 格式化

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

  • safe 不转义

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

  • truncatechars 截断

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

回到目录



模板的for循环

语法格式

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% endfor %}
</ul>

可用的一些参数:

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 %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

只有if和else

{% if user_list|length > 5 %}
  七座豪华SUV
{% else %}
    黄包车
{% endif %}

回到目录



模板继承

母板

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Title</title>
  {% block page-css %}
  
  {% endblock %}
</head>
<body>

<h1>这是母板的标题</h1>

{% block page-main %}

{% endblock %}
<h1>母板底部内容</h1>
{% block page-js %}

{% endblock %}
</body>
</html>
  1. 继承母板

    在子页面中在页面最上方使用下面的语法来继承母板。

     {% extends 'layouts.html' %}
    
  2. 定义block中的内容

    通过在母板中使用{% block xxx %}来定义"块"。

    在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

     {% block page-main %}
       <p>世情薄</p>
       <p>人情恶</p>
       <p>雨送黄昏花易落</p>
     {% endblock %}{% block page-main %}
       <p>世情薄</p>
       <p>人情恶</p>
       <p>雨送黄昏花易落</p>
     {% endblock %}
    
  3. 组件

    可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

     {% include 'navbar.html' %}
    
  4. 静态文件

     {% load static %}
     <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
    

    引用JS文件时使用:

     {% load static %}
     <script src="{% static "mytest.js" %}"></script>
    

    某个文件多处被用到可以存为一个变量

     {% load static %}
     {% static "images/hi.jpg" as myphoto %}
     <img src="{{ myphoto }}"></img>
    

回到目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值