python静态框架_python的Web框架,Django模板变量,过滤器和静态文件引入

HTML模板的路径查找

在setting中设置查找路径:

1 #默认的查找在此处填写,优先级最高,为在manage.py的同级路径中,添加(常规是template)文件夹,在(template)文件夹中配置HTML文件

2

3 默认路径地址:4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

1 TEMPLATES =[2 {3 'BACKEND': 'django.template.backends.django.DjangoTemplates',4

5 #优先查找的路径'DIR',对其进行拼接。

6 'DIRS':[os.path.join(BASE_DIR,'templates')]7

8 #如果此处为True,则会查找INSTALLED_APPS内注册的目录路径下,会在app下的templas文件夹中寻找

9 'APP_DIRS':Ture10

11 'OPTIONS': {12 'context_processors': [13 'django.template.context_processors.debug',14 'django.template.context_processors.request',15 'django.contrib.auth.context_processors.auth',16 'django.contrib.messages.context_processors.messages',17 ],18 },19 },20 ]

如果APP_DIRS为True,则会在'DIRS'找完之后,在'INSALLSE_APPS'的列表目录下寻找

1 INSTALLED_APPS =[2 #注册目录

3 'teacher.apps.TeacherConfig'

4 'teacher':可以如此简写5

6 'django.contrib.admin',7 'django.contrib.auth',8 'django.contrib.contenttypes',9 'django.contrib.sessions',10 'django.contrib.messages',11 'django.contrib.staticfiles',12 ]

只要找到了符合的模板就返回,不再向下继续找了,所以优先级和路径很重要

静态页面,动态页面

静态页面是没有改变,获取到网页后,是固定样式的; 动态页面是和服务器有交互的页面,在与服务器交互后,返回的页面会有不同的页面返回给浏览器

context 模板变量

view中传递数据给html页面,命名规则不能以下划线开头,其他同python,变量的值可以是任何数据类型

context={'key':value}

例:#view文件内配置传送:

defindex(request):

now=datetime.now()return render(request, 'index.html',context={'nows':now#此处对应的字典传送给index.html

})#index模板文件内配置接受:

当前时间为:{{nows}}

#此处的nows是对应的view文件中的key

时间格式设置,设置的时间格式并不是我们想要的时区时间,就需要修改时间的参数。

setting中设置:

1 TIME_ZONE = 'Asia/Shanghai'

模板变量各种方法:

html接受的语法及输出的结果:下列的列表、字典、函数等需要再views文件中配置才可以接受

1

2 列表:lt = [1,2,3]3

我是一个列表:{{lt}}

4 输出:[1,2,3]5

我是列表中的第二个值:{{lt.2}}

6 输出:2

7

8

9 函数:10

我是一个函数:{{func}}

11 输出:函数的结果12

13

14 字典:dt = {'name':'hong','age':18,'items':'abc'}15

我是一个字典:{{dt}}

16 输出:{'name':'张三','age':18}17

我是字典的一个值:{{dt.name}}

18 输出:张三19

20

21

22 其他异议的字典输出:23

调用字典的一个方法{{dt.items}}

24 输出:abc; 如果字典中没有'items'这个键,则返回的是items的这个字典方法25 1.首先键值对查找;然后属性或方法调用26

27

28

29 总结:30 1、计算变量,将其替换为结果31 2、遇到(.)的时候,按照以下顺序查找:32 -1.字典的键值对33 -2.属性或者方法查找34 -3.数字索引查找35 3、如果结果是可调用的,则调用它时不带参数,调用的结果为模板的值36

37 **渲染失败返回空**

38

模板过滤器

传递的参数例子,为一下内容提供参数例子

1 now =datetime.now()2

3 lt = [1,2,3]4

5 dt = {'name':'张三','age':18,'items':'aBc','text':'i an hua'}6

7 deffunc()8 return '我是一个函数'

日期,时间的格式化date,time

以上列代码传送的参数 时间now为例:

1

2

当前日期时间{{now|date:"Y年m月d日 H时i分s秒"}}

3

当前时间{{now|time:"H时i分s秒"}}

4

输出格式的结果为:

1    当前日期时间2019年02月20日 11时53分11秒2 当前时间11时53分11秒

date和time过滤器格式

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

add:将参数与值相加,首先尝试转换成整数相加,如果失败,则尝试其他多有可能,{{value|add:'value'}}

1

1列表值的相加:{{ lt.1|add:'3' }}

2

3

2列表值的相加:{{ lt.1|add:'3.5' }}

4

2列表值的相加:{{ lt.1|add:3.5 }}

5

6

函数的值为{{ func|add:'haha' }}

输出结果

1 1列表值的相加:5

2

3 2列表值的相加:4 2列表值的相加:5

5 #add后面的值如果是str类型不是整数则渲染失败,返回为空,如果是int类型则会转成整数再相加

6

7 3函数的值为:我是一个函数haha

capfirst:首字母大写

1

首字母的大小写方法:{{ dt.items|capfirst }}

输出结果

1 首字母的大小写方法:ABc

default:如果变量解析失败,则返回给定的默认值,当value是''空字符串,也会输出默认值。

1 例子2 deffunc(aa):3 return '带参数的函数'

4 deffunc():5 return '''

6 def func(aa):7 return None8

9

10

解析失败则返回默认值:{{ func|default:"nothing" }}

输出结果

1 解析失败则返回默认值:nothing

first,last:第一个元素和最后一个元素

1

列表的第一个元素:{{ lt|first }}

2

列表的最后一个元素:{{lt|last}}

输出结果

1 列表的第一个元素:1

2 列表的最后一个元素:3

slice:切片

1

我是列表的倒序:{{ lt|slice:"::-1"}}

输出结果:

1 我是列表的倒序:[3,2,1]

join:连接字符串列表,与str.join(list)一样

1

把字典的value连接起来:{{ dt.name|join:"xxx"}}

输出结果

1 把字典的value连接起来:张xxx三

floatformat:浮点数格式化,不指定小数位参数,默认保留一位

value Template Output(结果)34.23234 {{ value|floatformat}} 34.2

34.23234 {{ value|floatformat:3}} 34.232

length,length_is:返回字符串或列表的长度

1

列表的长度是:{{ lt|length}}

2

列表的长度是{{ le|length }}?:{{ lt|length_is:3 }}

输出结果

1 列表的长度是:3

2 列表的长度是3吗?:True

lower, upper :字符串中的字符都变小写和大写

1

字符都变小写:{{ dt.items|lower }}

2

字符都变大写:{{ dt.items|upper }}

输出结果

1 字符都变小写:abc2 字符都变大写:ABC

title:标题化,首字母大写

1

title标题化:{{ dt.text|title }}

输出结果:

1 title标题化:I Am Hua

过滤器可以用链式的方式:

只要能够解析出来,就可以接多个的过滤器

{{func|default:"nothing"|add:"haha"}}

safe:关闭变量的自动转义,使html标签生效,xss跨域脚本攻击

反射型和存储型,因为浏览器会解析css和js,所以django帮我们管理这方面的问题。

js = ''html= '

我是安全的,需要渲染成html

'

{{ html|safe }}

添加了safe后,才会执行这段代码,而不是转义成文本格式。

我是安全的,需要渲染成html

静态文件

settings文件中设置静态文件路径的配置

默认是static,但也可以更改为其他

1 STATIC_URL = '/static/'

同时在manage文件的当前目录下,创建static文件夹,在其文件下创建app的文件夹,用于管理静态文件(css,js,img等……)

1 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

静态文件的引入

-硬编码

在css文件夹下创建了同名的css文件。然后在html中的head内引入文件

html代码

1

2

3

-模板标签,动态解析

在html的首行(第一行代码)

html代码

1 {% load static %}2

3

4

5

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值