Django -- 模板语法

Posted agoni-7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django -- 模板语法相关的知识,希望对你有一定的参考价值。

12.2.9 模板语法
1. MVC框架和MTV框架
  • MVC框架

    技术图片

    M - model : 模型 -- 与数据库交互,操作数据库

    V - view : 视图 -- 展示页面 html

    C - controller : 控制器 -- 调度作用,负责业务逻辑

  • MTV框架

    技术图片

    M - model : 模型 -- 与数据库交互,操作数据库 ( ORM )

    T - template : 视图 -- 模板,HTML

    V - view : 视图 -- 负责业务逻辑

2. 变量
 变量名 
 变量名.   # 可以通过点的方式获取值
list.索引(索引值不能为负) 
dict.key / dict.keys / dict.values / dict.items
?
 类实例化对象 
obj.属性 / obj.方法

 

<!-- 注:-->

当模板系统遇到一个(.)时,会按照如下的顺序去查询:

  1. 在字典中查询 ( 如果字典中有key名字为 ‘keys‘,查询的时候先找keys对应的values)

  2. 属性或者方法

  3. 数字索引

3. 过滤器

filters 过滤器 -- 用来修改变量的显示结果

语法: value|filter_name / value|filter_name:参数

<!-- ‘:‘ 左右没有空格没有空格没有空格,参数最多有一个 -->

default -- 提供默认值

 xxx|default:‘nothing‘  # 传过来的变量不存在或者为空,使用默认值
# 注:
     在setting中TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:‘NOT FOUND‘,可以替代default的的作用。(优先级高于default)

 

slice -- 切片

 name_list|slice:‘0:1‘ 

 

filesizeformat -- 文件大小格式化

‘filesize‘: 1*1024
 filesize|filesizeformat   # 1.0KB

 

add -- 表示 +

 num|add:1   # 数字相加
 string|add:‘123‘  # 字符串拼接
name_list|add:other_list # 列表合并

 

length -- 返回变量的长度

 value|length 

 

join 使用字符串拼接列表

 name_list|join:‘_‘ 

 

truncatechars -- 按照字符分割.截断的字符串,多余的用‘...‘表示

 long|truncatechars:‘15‘  # 只显示15个字符,三个点也包含在15个字符内

 

truncatewords -- 按照单词分割(按照空格)

 long|truncatewords:‘6‘ 

 

date -- 日期格式化

 now|date:‘Y-m-d H:i:s‘ 
# settings配置 -- Django中就可以不用日期过滤器
USE_L10N = False
DATETIME_FORMAT = ‘Y-m-d H:i:s‘

 

safe -- 告诉django不需要转义,是安全的

 js|safe  
?
# 在Python文件中设置
from django.utils.safestring import mark_safe
mark_safe(‘<a href="https://www.baidu.com">跳转</a>‘)
 a 

 


?
4. 自定义过滤器
  1. 在app01文件下创建一个templatetags的python包

  2. 在包内创建py文件 -- 自定义名字 ( my_ tags.py )

  3. 在py文件中写入

    from django import template
    register = template.Library()   # regiter不能变,固定写法

     

  4. 定义函数 + 装饰器

    @register.filter() # 添加装饰器
    def new_upper(value,arg=None):  # arg接收过滤器的参数
        return value.upper()

     

  5. 在模板中使用

    % load my_tags %  # 在模板中导入
     ‘abc‘|new_upper:dic  # 函数名就是过滤器名

     

5. Tag -- 标签
  1. for

%  for i in list %
     forloop.counter 
     i 
% endfor %

 

for循环可用的一些参数

Variable(变量)Description(描述)
forloop.counter 当前循环的从1开始的计数
forloop.counter0 当前循环的从0开始的计数
forloop.revcounter 当前循环的倒叙计数(到1结束)
forloop.revcounter0 当前循环的倒叙计数(到0结束)
forloop.first 当前循环是否是第一次循环 布尔值
forloop.last 当前循环是否是最后一次循环 布尔值
forloop.parentloop 当前循环父级循环的forloop

for ... empty

% for name in name_list %
     name 
% empty %
    空的数据
% endfor %

 

  1. if

% if p1.age < 18 %
    他还是个宝宝
% elif p1.age == 18 %
    刚成年,可以出家
% else %
    骚老头子坏得很
% endif %

 

<!-- 不支持算数运算 ,不支持连续判断 -->

<!-- if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。 -->

  1. with

% with agoni=person_list.1.name age=person_list.1.age   %
     agoni   age 
% endwith %

 

  1. csrf_token

    这个标签用于跨站请求伪造保护。

    在页面的form表单里面写上% csrf_token %

    form表单中有一个隐藏的input标签 name =‘csrfmiddlewaretoken‘

    <!-- 看下图 -->

<form action="" method="post">
    % csrf_token %
    <input type="text" name="name">
    <button>提交</button>
</form>

 

技术图片

 

 

 

 

以上是关于Django -- 模板语法的主要内容,如果未能解决你的问题,请参考以下文章

Django模板语法

Django 模板语法

Django框架-Django模板(template)系统

Django框架之第三篇模板语法

Django框架之第三篇模板语法

Django框架之模板语法(重要!)