Django-3.templates-模板变量及模板过滤器


一、模板路径总结

  • 在配置文件settings.py中找到TEMPLATES设置来配置
  • 这是一个设置选项的列表,模板大都包含两项通用设置;两种方式配置模板:
    1. 第一种:DIRS定义一个目录列表,模板引擎按列表顺序搜索这些目录,以查找模板源文件、将templates放在主项目目录下。
    	TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
    ]
    
  1. 第二种:APP_DIRS高速模板引擎是否应该进入每个已安装的应用中查找模板,值为True,则模板会去安装App夏目安的templates文件夹查找模板。所以我们也可以在每个app的里面创建模板目录templates存放模板,这种方式需要将这个app添加到settings.py文件的INSTALLED_APPS列表中。

二、模板变量

1.模板变量使用规则

  1. 语法:{{变量名}}
  2. 命名由字母和数字以及下划线组成,不能有空格和标点符号
  3. 可以使用字典、模型(类似于“类的概念”)、方法、函数、列表
  4. 不要和python或django关键字重名
  5. 变量和查找

注:

  1. 如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值,而不会访问字典的items方法。
  2. 点在模板渲染时有特殊的含义。变量名中点表示查找。

模板变量传递数据:

1.列表和字典传值:通过点序号(Example:list.1)索引取值

book\urls.py

from django.urls import path
from . import views

urlpatterns=[
        path('index/',views.index),
        path('article/', views.article),
        path('article_new/', views.article_new, name='article_new'),
        path('bilibili/', views.bilibili),
        path('temp/', views.temp),
        path('login/<name>/<pwd>',views.login)
]

book\views.py

from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
mr = Person(name='moran',age=18)
li = ['q','w','e','r']
dir = {'a':111,'b':222}


def temp(request):
    return render(request,'book/index.html',
                  context={
                      'books_name':'python',#字符串
                      'hello':hello(),#函数
                      'moran':mr,#类对象
                      'say':mr.say,#方法
                      'li':li,#列表
                      'dir':dir,#字典
                  })

templates\book\index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板变量</title>
</head>
<body>
欢迎{{ username }}登录网站
 这个是字符串变量{{ books_name }}<br>
 这个是函数变量{{ hello }}<br>
 这个是类变量{{ moran }}<br>
 这个是类方法变量{{ say }}<br>
 这个是列表变量{{ li.0 }}<br>
 这个是字典变量{{ dir.a }}<br>

</body>
</html>

三、模板 过滤器

1.过滤器

使用:{{变量 | 方法 | 方法}}

1.1 作用
  • 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量,展示出来。
  • 语法{{fruits | lower}}
1.2 管道符号进行链式调用
  • 比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。
  • 语法{{fruits | lower | capfirst}}
1.3 使用参数
  • 过滤器可以使用参数,在过滤器名称后面使用冒号“:”,再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器。
  • 语法如下:{{fruits | cut:""}}
  • 注意:使用参数的时候,冒号和参数之间不能有空格,一定要紧挨着。

2.常用的过滤器

  1. add:字符串相加,int相加,列表相加,如果失败,将会返回一个空字符串
    - 数字相加{{ age | add:12 }}##相加了12
    - 字符串相加{{ str | add:str }}

  2. default :提供一个默认值,在这个值Django认为是false的时候使用,比如:空字符串、None。区别于default_if_none,这个只有在变量为None的时候才使用默认值。
    - 设置了默认值的变量{{ null | default:‘abcd’ }}
    - ## null 可以是任何变量

    - 设置了只有为None(包括空字符串、列表等)时,默认值的变量{{ null | default_if_none:‘abcd’ }}
    - ## null 变量为空时,设置默认值

  3. first:返回一个列表中的第一个值。
    - 列表第一个值{{ list | first }}

  4. last:返回列表中的最后一个值。
    - 列表最后一个值{{ list | last }}

  5. date:格式化时间和日期。
    - 这是默认的date日期时间格式{{ now }}
    - 这是默认的date日期时间格式{{ now | date}}
    - 这是默认的time日期时间格式{{ now | time}}
    =>>>这是默认的date日期时间格式2021年8月21日 16:51
    =>>>这是默认的date日期时间格式2021年8月21日
    =>>>这是默认的time日期时间格式16:54

  6. time:格式化时间
    - 见下3

  7. join:跟python中的join一样的用法。
    - 这是字符串的join方法{{ str|join:’&&’ }}
    =>>>这是字符串的join方法T&&H&&I&&S&& &&I&&S&& &&P&&Y&&T&&H&&O&&N

  8. length:返回字符串或者是数组的长度
    - 这是字符串的获取长度方法{{ str|length}}
    =>>>这是字符串的获取长度方法14

  9. length_is:字符串或者是数组的长度是否是指定的值。
    - 这是字符串的判断长度方法{{ str|length_is:14 }}
    =>>>这是字符串的判断长度方法True

  10. lower:把所有字符串都变成小写。

  11. truncatechars :根据后面的参数,截断字符,如果超过了用…表示。
    - 这是字符串只显示固定长度的字符,其余内容省略{{ str|truncatechars:10}}
    =>>>这是字符串只显示固定长度的字符,其余内容省略THIS IS…

  12. truncatewords:同truncatechars,这是以一个单词为单位进行截断。
    ——以上有两个xx_html类型的,针对html,截断标签中的字符,而不会截断标签。
    - 这是字符串只显示固定数目的单词,其余内容省略{{ str|truncatewords:2}}
    =>>>这是字符串只显示固定数目的单词,其余内容省略THIS IS …

  13. capfirst:首字母大写。

  14. slice:切割列表。用法跟python中的切片操作是一样的,区别是前闭合,后开放。
    - 这是字符串切片{{ str|slice:‘1:4’}}
    这是列表切片{{ list|slice:‘2:3’}}
    =>>>这是字符串切片HIS
    这是列表切片[‘e’]

  15. striptags:去掉所有的html标签。
    - 这是含有html标签的字符串{{ html }}
    这是去除html标签的字符串{{ html|striptags }}
    =>>>这是含有html标签的字符串<h1>this is html.</h1>
    这是去除html标签的字符串this is html.

  16. safe:关闭变量的自动转义。
    - 这是关掉自动转义,使字符串里的html标签生效{{ html|safe }}
    =>>>页面效果如下:

    在这里插入图片描述

  17. floatformat:浮点数格式化
    - 这是没做处理的小数{{ float }}
    这是保留一位的小数{{ float|floatformat }}
    这是保留指定位数的小数{{ float|floatformat:‘4’ }}
    =>>>这是没做处理的小数3.1415926
    这是保留一位的小数3.1
    这是保留指定位数的小数3.1416

3.date和time过滤器格式:

  1. Y:四位数的年。如:1999
  2. y:两位数的年。如99
  3. m:两位数的月。如:02
  4. n:一位数的月。如:2
  5. d:两位数的日。如:01
  6. j:一位数的日。如:1
  7. g:12小时制的一位数的小时。如:1,9,12
  8. G:24小时制的一位数小时。如:0,8,23
  9. h:12小时制的两位数的小时。如01,09,12
  10. H:24小时的两位数的小时。如:01,13,24
  11. i:分钟。从00-59
  12. s:秒。从00-59

app templates\book\index.html

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>模板变量</title></head>
<body>
{#注意**date:**部分喔,冒号后面不能有空格!#}
这是date过滤器的年月日24小时制格式{{ now | date:'Y-m-d H:i:s' }}<br>
这是date过滤器的年月日12小时制格式{{ now | date:'Y-m-d h:i:s' }}<br>
</body></html>

=>>这是date过滤器的年月日24小时制格式2021-08-21 17:19:46
这是date过滤器的年月日12小时制格式2021-08-21 05:21:13

4.过滤器的例子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.关于自动转义

  • 什么是自动转义?
    —— 自动转义是将变量的一些特殊字符,比如左箭头(<)、右箭头(>)转义成html代码,这样做的目的是为了处理一些不安全的变量。
    - <:转义成&lt;
    - >:转义成&gt;
    - ‘:转义成&#39;
    - “:转义成&quot;
    - &:转义成&amp;

app book\views.py

from django.shortcuts import render
from django.http import HttpResponse
def index_1(request):
    return render(request,'book/index.html',
                  context={
                      'a': '&lt'
                  })

templates\book\index_1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模板变量</title>
</head>
<body>
这是自动转义的字符{{ a| safe }}<br>
这是自动转义的字符{{ a }}<br>
</body>
</html>

页面预览
在这里插入图片描述

四、静态文件引用

1.静态文件目录

  • 在项目目录下创建static的目录, 为了区分开各种类型的文件分别创建css,image,js的目录.
    在这里插入图片描述

2. 静态文件的配置

  • 在settings.py文件中添加STATICFILES_DIRS
    设置静态文件目录路径,同templates
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR,'static')##BASE_DIR:主文件夹
    ]
    

3.创建静态文件

  • 1.创建文件/static/js/myjs.js
    -
  • 2.创建文件/static/css/mystyle.css
    在这里插入图片描述
  • 3.创建文件/static/image/myimage.jpg
    ##存入图片

在这里插入图片描述

3.静态文件引用

创建模板/templates/book/static_test.html
在这里插入图片描述

总结


1、 模板路径
2、 模板变量
3、 过滤器的概念
4、 过滤器的使用
5、 静态文件引用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值