声明:本文中关于Django过滤器表内容参考自博友keithzone的博文“django 模板”https://blog.csdn.net/keithzone/article/details/81117177, 感谢该博友的分享。
I. 模板变量
课前思考:为什么要在templates目录下创建app命名的目录再放模板进去呢?
答案:因为加入将index.html这个模板文件放再templates的根目录下,那么如果要再建新的模板时,根目录下同样也有index.html,此时python无法区分两个模板目录中的inex.html模板文件。
1. 模板路径查找
查找模板路径的逻辑:先在settings.py里的TEMPLATES = []之中的DIRS查找,若没有,而APP-DIRS为True,则会在注册了的app的文件夹下依次查找templates文件
templates里面注册
INSTALLED_APP
2. 模板变量:
动态页面:
页面会随着不同时间、不同用户、不同因素发生改变。
静态页面:
不随时间,客户端的变化而变化的页面,内容固定不变。
context上下文变量,用于传递变量
模板变量语法
语法:{{变量名}}
【由字母、数字以及下划线组成,不能以下划线开头,也不能以数字开头,不能由空格和标点符号】
【不要使用python或者django的关键字命名】
<p>{{now}}</p>
lt.index #列表.下标,返回对应的值
dt.name
#字典.键名,返回对应的键值
模板变量解析失败返回空值
变量解析规则
- 当模板引擎遇到了变量时,他会计算该变量,摈弃将其替换为结果
- 当模板引擎在变量中遇到"."时,他会按以下顺序尝试查找:
- (1) 字典键值查找
- (2) 属性或方法查找
- (3) 数字索引查找
- 如果结果是一个可调用(callable),则调用它,结果为模板变量的值。
3. 过滤器
格式化后传进去
语法:{{变量名|过滤器名:参数}}
{{now|date: “D d M Y”}}
{{lt.1|add:2}}或{{lt.1|add:-2}}, 表示列表下标为1的数+2得到的值,
<p>我是列表lt下标为1的元素:{{ lt.1|add:2}}</p>
运行结果是:
我是列表lt下标为1的元素:5
如果以上写成{{lt.1|add:-2}}
运行结果是:
我是列表lt下标为1的元素:1
{{ lt|first }} # 列表的第一个元素
{{ lt|last }} # 列表的最后一个元素
{{ lt|slice:":N" }} # 列表切片顺数的N个元素
{{ lt|slice:“N:” }} # 列表切片顺数第N位后面的元素
注意:slice:后面接的""不要有空格
其他常用过滤器:
Django 过滤器表
过滤器名 | 描述 | 示例 |
---|---|---|
upper | 以大写方式输出 | {{ user.name|upper }} |
add | 给value加上一个数值 | {{ lt.1|add:2}} 下标为1的数+2 |
capfirst | 第一个字母大写 | {{ 'good'|capfirst }} 返回"Good" |
center | 输出指定长度的字符串,把变量居中 | {{ "abcd"|center:"50" }} |
cut | 删除指定字符串 | {{ "Dream it possible"|cut:"it" }} 返回Dream possible |
date | 格式化日期 | {{ now|date:"D d M Y" }} |
default | 如果值不存在,则使用默认值代替 | {{ value|default:"(N/A)" }} |
dictsort | 按某字段排序,变量必须是一个dictionary | {{% for moment in moments|dictsort:"id" %}} |
dictsortreversed | 按某字段倒序排序,变量必须是dictionary | |
divisibleby | 判断是否可以被数字整除 | {{ 224|divisibleby:"2"}} 返回布尔值True |
escape | 按HTML转义,比如将"<“转换为”<" | |
filesizeformat | 增加数字的可读性,转换结果为13KB,89MB,3Bytes等 | {{ 1024|filesizeformat }} 返回 1.0KB |
first | 返回列表的第1个元素,变量必须是一个列表 | |
floatformat | 转换为指定精度的小数,默认保留1位小数 | {{ 3.1415926|floatformat:"3" }} 返回 3.142 四舍五入 |
get_digit | 从个位数开始截取指定位置的数字 | {{ 123456|get_digit:'3'}} 返回值是:4 |
length_is | 检查列表,字符串长度是否符合指定的值 | {{ 'hello'| length_is:'3' }} 返回布尔值False |
ljust | 输出指定长度的字符串,变量左对齐 | {{'ab'|ljust:5}} 返回 ‘ab’ |
lower | 字符串变小写 | |
make_list | 将字符串转换为列表 | |
pluralize | 根据数字确定是否输出英文复数符号 | |
random | 返回列表的随机一项 | |
removetags | 删除字符串中指定的HTML标记 | {{ value|removetags:"h1 h2"}} |
stringformat | 字符串格式化,语法同python | {{ 1|stringformat:'i' }} |
slice | 切片操作, 返回列表 | {{ 'asdikfjhihgie'|slice:':5' }} 返回 ‘asdik’ |
title | 每个单词首字母大写 | |
truncatewords | 将字符串转换为省略表达方式 | {{ 'This is a pen'|truncatewords:2 }} 返回This is … |
truncatewords_html | 同上,但保留其中的HTML标签 | {{ '<p>This is a pen</p>'|truncatewords_html:2 }} 返回 <p>This is ...</p> |
urlize | 将变量字符串中的url由纯文本变为链接 | |
urlencode | 将字符串中的特殊字符转换为url兼容表达方式 | {{ 'http://www.aaa.com/foo?a=b&b=c'|urlencode }} |
wordcount | 返回变量字符串中的单词数 | |
yesno | 将布尔变量转换为字符串yes, no 或maybe | {{ True|yesno }} 返回yes{{ False|yesno }} 返回no{{ None|yesno }} 返回maybe |
4. 静态文件
一个网页是由js, css和html构成的,通常js, css是静态文件。而静态文件是由以下这个django内建应用来管理的“django.contrib.staticfiles”
在settings里面的INSTALLED_APPS = []里面,如果能找到“django.contrib.staticfiles”,则表示静态文件管理的应用已经注册了。
默认是在INSTALLED_APPS里面
路径设置
-
在项目根目录新建static目录
-
在setting.py里输入路径拼接指令:
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]
STATIC_URL = '/static/'
# 这个是默认会配置的。
静态文件引用
{% load static %}
# 写在模板头顶端