Django模板(回顾复习)

Django模板

  • 模板和模板引擎
  • Django模板相关配置
  • 模板变量
    • 渲染静态图片
    • 渲染python中的对象
    • DTL与Jinja2的使用区别
  • 模板标签
    • 循环控制
      • 与Jinja2区别
    • 条件控制
    • URL解析
      • 与Jinja2区别
    • 当前时间显示
  • 模板的抽象与继承
  • 模板过滤器
    • 内置过滤器
    • 与Jinja2区别
    • 自定义过滤器
      • Flask中自定义过滤器

模板和模板引擎

模板具有一定的格式和骨架,可以动态地生成HTML。

模板引擎就是将模板中的特定内容替换成python变量。
Django模板(回顾复习)_第1张图片
Django模板(回顾复习)_第2张图片

Django模板相关配置

Django模板(回顾复习)_第3张图片
BACKEND:模板引擎
DIRS:模板引擎按列表顺序搜索这些目录以查找模板源文件
APP_DIRS:决定模板引擎是否应该进入每个已安装的应用中查找模板
(每种模板引擎都定义了惯用名作为应用内部存放模板的目录名)
DTL - templates目录
Jinja2 - jinja2目录
Django模板(回顾复习)_第4张图片
寻找模板:按配置顺序查找,先根目录后模块目录。

模板变量

{{ variable }}
当模板引擎遇到一个变量,它将计算这个变量,然后用结果替换。

注意:变量名称中不能有空格或标点符号,不能以"_"开头。

渲染静态图片

Django模板(回顾复习)_第5张图片
关于media的配置:
Django模板(回顾复习)_第6张图片
在这里插入图片描述

渲染python中的对象

{{ object.attribute }}

dict,list/tuple,list/tuple嵌套dict复杂类型数据

DTL与Jinja2的使用区别

  1. 注意:DTL中变量名 不能有空格或标点符号

{{ object["variable "] }} ,{{ “a.b” }},{{ “a b” }}不被支持!Jinja2却支持。

  1. DTL类中的成员方法调用不需要(),也不支持参数传递

模板标签

{% tag %}
Django模板(回顾复习)_第7张图片

循环控制

Django模板(回顾复习)_第8张图片
如果data_list中没有内容则显示empty中的内容,有内容则正常显示。

循环内中的变量forloop:
Django模板(回顾复习)_第9张图片

Django模板(回顾复习)_第10张图片
在这里插入图片描述

与Jinja2区别

  1. DTL中循环变量为forloop,Jinja2中为loop
  2. DTL中循环List为空:{% empty %},Jinja2中为{% else %}
  3. DTL中循环中的再循环{% cycle ‘odd’ ‘even’ %},Jinja2中 {{loop.cycle(‘odd’,‘even’)}}
  4. DTL不支持continue和break

条件控制

Django模板(回顾复习)_第11张图片

Django模板(回顾复习)_第12张图片
查看源代码时,html注释会显示而模板注释不会显示!

URL解析

  1. url标签的使用:{% url ‘url_name’ params %}

url_name : 路由名(path(‘name’))

  1. static静态文件URL解析
    在这里插入图片描述
    settings.py相关配置:
    在这里插入图片描述

STATIC_ROOT 是在部署静态文件时所有的静态文静聚合的目录,django会把所有的static文件都复制到STATIC_ROOT文件夹下

STATICFILES_DIRS 首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)

STATIC_URL 利用STATIC_URL来让浏览器可以直接访问静态文件

与Jinja2区别

DTL:{% url ‘url_name’ params %}
Jinja2:{{ url_for(‘url’) }}

当前时间显示

{% now “jS F Y H:i” %}
详情见官方文档
https://docs.djangoproject.com/zh-hans/3.0/ref/templates/builtins/#std:templatefilter-date

模板的抽象与继承

Django模板(回顾复习)_第13张图片
Django模板(回顾复习)_第14张图片
Django模板(回顾复习)_第15张图片
Django模板(回顾复习)_第16张图片
Django模板(回顾复习)_第17张图片

模板过滤器

{{ value|filter_name:params }}

内置过滤器

  1. 默认值显示:

{{ value|default:"" }},{{ value|default_if_none:"" }}

  1. 数字四舍五入显示:

{{ value|floatformat:3 }} 保留3为小数

  1. 日期对象格式化:

{{ value|date:“D d M Y” }}

  1. 时间对象格式化:

{{ value|time:“H:i” }}

详情见官方文档
https://docs.djangoproject.com/zh-hans/3.0/ref/templates/builtins/#std:templatefilter-date

  1. 富文本内容转义显示:

{{ value|safe }}

  1. 字符串截取:

{{ value|truncatechars:9 }}
{{ value|truncatechars_html:9 }}

与Jinja2区别

DTL:{{ value|filter_name:params }}
Jinja2:{{ value|filter_name(params) }}

自定义过滤器

在某个模块下新建一个包templatetags
Django模板(回顾复习)_第18张图片
poll_extras.py:过滤器内容
Django模板(回顾复习)_第19张图片
Django模板(回顾复习)_第20张图片
register.filter(‘filter_name’, function)
@register.filter(name=‘filter_name’)
Django模板(回顾复习)_第21张图片
如果过滤器有参数,则使用过滤器时需要传递参数,
{{ value|filter_name:parms }}

Flask中自定义过滤器

Django模板(回顾复习)_第22张图片

你可能感兴趣的:(django,过滤器,python)