文章目录
一、模板路径总结
- 在配置文件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', ], }, }, ]
- 第二种:APP_DIRS高速模板引擎是否应该进入每个已安装的应用中查找模板,值为True,则模板会去安装App夏目安的templates文件夹查找模板。所以我们也可以在每个app的里面创建模板目录templates存放模板,这种方式需要将这个app添加到settings.py文件的INSTALLED_APPS列表中。
二、模板变量
1.模板变量使用规则
- 语法:{{变量名}}
- 命名由字母和数字以及下划线组成,不能有空格和标点符号
- 可以使用字典、模型(类似于“类的概念”)、方法、函数、列表
- 不要和python或django关键字重名
- 变量和查找
注:
- 如果data是一个字典,那么访问data.items将会访问data这个字典的key名为items的值,而不会访问字典的items方法。
- 点在模板渲染时有特殊的含义。变量名中点表示查找。
模板变量传递数据:
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.常用的过滤器
-
add
:字符串相加,int相加,列表相加,如果失败,将会返回一个空字符串
- 数字相加{{ age | add:12 }}##相加了12
- 字符串相加{{ str | add:str }} -
default
:提供一个默认值,在这个值Django认为是false的时候使用,比如:空字符串、None。区别于default_if_none,这个只有在变量为None的时候才使用默认值。
- 设置了默认值的变量{{ null | default:‘abcd’ }}
- ## null 可以是任何变量
- 设置了只有为None(包括空字符串、列表等)时,默认值的变量{{ null | default_if_none:‘abcd’ }}
- ## null 变量为空时,设置默认值 -
first
:返回一个列表中的第一个值。
- 列表第一个值{{ list | first }} -
last
:返回列表中的最后一个值。
- 列表最后一个值{{ list | last }} -
date
:格式化时间和日期。
- 这是默认的date日期时间格式{{ now }}
- 这是默认的date日期时间格式{{ now | date}}
- 这是默认的time日期时间格式{{ now | time}}
=>>>这是默认的date日期时间格式2021年8月21日 16:51
=>>>这是默认的date日期时间格式2021年8月21日
=>>>这是默认的time日期时间格式16:54 -
time
:格式化时间
- 见下3 -
join
:跟python中的join一样的用法。
- 这是字符串的join方法{{ str|join:’&&’ }}
=>>>这是字符串的join方法T&&H&&I&&S&& &&I&&S&& &&P&&Y&&T&&H&&O&&N -
length
:返回字符串或者是数组的长度
- 这是字符串的获取长度方法{{ str|length}}
=>>>这是字符串的获取长度方法14 -
length_is
:字符串或者是数组的长度是否是指定的值。
- 这是字符串的判断长度方法{{ str|length_is:14 }}
=>>>这是字符串的判断长度方法True -
lower
:把所有字符串都变成小写。 -
truncatechars
:根据后面的参数,截断字符,如果超过了用…表示。
- 这是字符串只显示固定长度的字符,其余内容省略{{ str|truncatechars:10}}
=>>>这是字符串只显示固定长度的字符,其余内容省略THIS IS… -
truncatewords
:同truncatechars,这是以一个单词为单位进行截断。
——以上有两个xx_html类型的,针对html,截断标签中的字符,而不会截断标签。
- 这是字符串只显示固定数目的单词,其余内容省略{{ str|truncatewords:2}}
=>>>这是字符串只显示固定数目的单词,其余内容省略THIS IS … -
capfirst
:首字母大写。 -
slice
:切割列表。用法跟python中的切片操作是一样的,区别是前闭合,后开放。
- 这是字符串切片{{ str|slice:‘1:4’}}
这是列表切片{{ list|slice:‘2:3’}}
=>>>这是字符串切片HIS
这是列表切片[‘e’] -
striptags
:去掉所有的html标签。
- 这是含有html标签的字符串{{ html }}
这是去除html标签的字符串{{ html|striptags }}
=>>>这是含有html标签的字符串<h1>this is html.</h1>
这是去除html标签的字符串this is html. -
safe
:关闭变量的自动转义。
- 这是关掉自动转义,使字符串里的html标签生效{{ html|safe }}
=>>>页面效果如下:
-
floatformat
:浮点数格式化
- 这是没做处理的小数{{ float }}
这是保留一位的小数{{ float|floatformat }}
这是保留指定位数的小数{{ float|floatformat:‘4’ }}
=>>>这是没做处理的小数3.1415926
这是保留一位的小数3.1
这是保留指定位数的小数3.1416
3.date和time过滤器格式:
Y
:四位数的年。如:1999y
:两位数的年。如99m
:两位数的月。如:02n
:一位数的月。如:2d
:两位数的日。如:01j
:一位数的日。如:1g
:12小时制的一位数的小时。如:1,9,12G
:24小时制的一位数小时。如:0,8,23h
:12小时制的两位数的小时。如01,09,12H
:24小时的两位数的小时。如:01,13,24i
:分钟。从00-59s
:秒。从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代码,这样做的目的是为了处理一些不安全的变量。
- <:转义成<
- >:转义成>
- ‘:转义成'
- “:转义成"
- &:转义成&
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': '<'
})
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
设置静态文件目录路径,同templatesSTATIC_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、 静态文件引用