Django模板语法

一、Python的模板:HTML代码 + 模板语法

二、模板语法需掌握以下几个用法

  1. 传值
  2. 过滤器
  3. 标签
  4. 继承
  5. 导入模板

三、简要介绍

1. 模板语法之传值

{{ }} # 一般给变量使用相关
{% %} # 一般跟逻辑相关的
模板中使用函数,类,调用方法等,都不要加括号 查询、引用对象方法等,一律使用点语法(句点符)

2. 模板语法之过滤器

# 相当于python的内置函数
语法:
{{ 变量|过滤器:参数 }}
'''
竖杠左边的变量当成过滤器的第一个参数,冒号后面的当成第二个参数;
如果冒号后面没有参数了,那就是只有一个参数;
过滤器最多传递两个参数。
'''

# 过滤器有很多个,大概有六七十个,我们需要掌握四五个就行
1. length:返回值的长度。它对字符串和列表都起作用。{{ value|length }}
2. default:如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。{{ value|default:"nothing"}}
3. date:格式化时间。{{ ctime| date:'Y-m-d H-i-s' }} 
4. filesizeformat: 将值格式化为一个可读的文件大小。{{ value|filesizeformat }}
5. safe:取消转义。{{ value|safe}}

'''
Django的模板中会对HTML标签和JS等语法标签进行自动转义,是保护HTML标签的源文件。
和安全相关的:
1. MySQL中会出现SQL注入的问题
2. 前端中会出现xss攻击
3. django中的form表单中会出现csrf跨站请求问题
'''

'''xss攻击:不让外部的标签直接生效'''
# 前端的代码有时候也可以在后端写好,然后传递到前端使用。
from django.utils.safestring import mark_safe
s = mark_safe('<h1>xss攻击</h1>')

3. 标签

# 在html中可以使用 if else for循环等
# for 标签
{% for foo in l %}
    {{ forloop }}
    <p>
        {{ foo }}
    </p>
{% endfor %}

# if 标签 {% for foo in l %} {% if forloop.first %} <p> 第一个 </p> {% elif forloop.last %} <p> 最后一个 </p> {% else %} <p> {{ foo }} </p> {% endif %} {% endfor %}
# for循环遍历字典 {% for foo in d.keys %} <p> {{ foo }} </p> {% endfor %} {% for foo in d.values %} <p> {{ foo }} </p> {% endfor %} {% for foo in d.items %} <p> {{ foo }} </p> {% endfor %}

4. 继承

Django模版引擎中最强大也是最复杂的部分就是模版继承。

首先,在父模板中搭建基础模板,并且定义能够被子模版覆盖的 blocks 。blocks标签中的内容,代表这能被子模板覆盖。

其次,在子模板中,使用extends标签,继承父模板。同时,使用block标签重写需要替换的内容。

{% extends 'home.html' %}

{% block content %}
    <h1>登录页面</h1>
    <form action="">
        <p>username: <input type="text" class="form-control"></p>
        <p>password: <input type="text" class="form-control"></p>
        <input type="submit" class="btn btn-success btn-block">
    </form>
{% endblock %}

5.  导入模板

语法:{% include '模版名称' %}

如:{% include 'index.html' %}
posted @ 2022-08-30 11:07  Tutu007  阅读(399)  评论(0编辑  收藏  举报