python的Web框架,Django模板变量,过滤器和静态文件引入
HTML模板的路径查找
在setting中设置查找路径:
#默认的查找在此处填写,优先级最高,为在manage.py的同级路径中,添加(常规是template)文件夹,在(template)文件夹中配置HTML文件 默认路径地址:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates', #优先查找的路径'DIR',对其进行拼接。
'DIRS':[os.path.join(BASE_DIR,'templates')] #如果此处为True,则会查找INSTALLED_APPS内注册的目录路径下,会在app下的templas文件夹中寻找
'APP_DIRS':Ture '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,则会在'DIRS'找完之后,在'INSALLSE_APPS'的列表目录下寻找
INSTALLED_APPS = [
#注册目录
'teacher.apps.TeacherConfig'
'teacher':可以如此简写 'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
只要找到了符合的模板就返回,不再向下继续找了,所以优先级和路径很重要
静态页面,动态页面
静态页面是没有改变,获取到网页后,是固定样式的; 动态页面是和服务器有交互的页面,在与服务器交互后,返回的页面会有不同的页面返回给浏览器
context 模板变量
view中传递数据给html页面,命名规则不能以下划线开头,其他同python,变量的值可以是任何数据类型
context={'key':value}
例:
#view文件内配置传送:
def index(request):
now = datetime.now()
return render(request, 'index.html',context={
'nows':now
#此处对应的字典传送给index.html
})
# index模板文件内配置接受:
<body>
<h2>当前时间为:{{nows}}</h2>
#此处的nows是对应的view文件中的key
</body>
时间格式设置,设置的时间格式并不是我们想要的时区时间,就需要修改时间的参数。
setting中设置:
TIME_ZONE = 'Asia/Shanghai'
模板变量各种方法:
html接受的语法及输出的结果:下列的列表、字典、函数等需要再views文件中配置才可以接受
<body>
列表:lt = [1,2,3]
<p>我是一个列表:{{lt}}</p>
输出:[1,2,3]
<p>我是列表中的第二个值:{{lt.2}}</p>
输出:2 函数:
<p>我是一个函数:{{func}}</p>
输出:函数的结果 字典:dt = {'name':'hong','age':18,'items':'abc'}
<p>我是一个字典:{{dt}}</p>
输出:{'name':'张三','age':18}
<p>我是字典的一个值:{{dt.name}}</p>
输出:张三 其他异议的字典输出:
<p>调用字典的一个方法{{dt.items}}</p>
输出:abc; 如果字典中没有'items'这个键,则返回的是items的这个字典方法
1.首先键值对查找;然后属性或方法调用 总结:
1、计算变量,将其替换为结果
2、遇到(.)的时候,按照以下顺序查找:
-1.字典的键值对
-2.属性或者方法查找
-3.数字索引查找
3、如果结果是可调用的,则调用它时不带参数,调用的结果为模板的值 **渲染失败返回空**
</body>
模板过滤器
传递的参数例子,为一下内容提供参数例子
now = datetime.now()
lt = [1,2,3]
dt = {'name':'张三','age':18,'items':'aBc','text':'i an hua'}
def func()
return '我是一个函数'
日期,时间的格式化date,time
以上列代码传送的参数 时间now为例:
<body>
<p>当前日期时间{{now|date:"Y年m月d日 H时i分s秒"}}</p>
<p>当前时间{{now|time:"H时i分s秒"}}</p>
</body>
输出格式的结果为:
当前日期时间2019年02月20日 11时53分11秒
当前时间11时53分11秒
date和time过滤器格式
Y:四位数的年。如:1999
y:两位数的年。如:99
m:两位数的月。如:01, 09
n:一位数的月。如:1, 9, 12
d:两位数的日。如:01, 09, 31
j:一位数的日。如:1, 9, 12
g:12小时制的一位数小时。如:1, 9 ,12
G:24小时制的一位数小时。如:0, 8 ,23
h:12小时制的两位数小时。如:01, 09, 12
H:24小时制的两位数小时。如:01, 13, 24
i:分钟。从00-59
s:秒。从00-59
add:将参数与值相加,首先尝试转换成整数相加,如果失败,则尝试其他多有可能,{{value|add:'value'}}
<p>1列表值的相加:{{ lt.1|add:'' }}</p>
<p>2列表值的相加:{{ lt.1|add:'3.5' }}</p>
<p>2列表值的相加:{{ lt.1|add:3.5 }}</p>
<p>函数的值为{{ func|add:'haha' }}</p>
输出结果
1列表值的相加:5
2列表值的相加:
2列表值的相加:5
#add后面的值如果是str类型不是整数则渲染失败,返回为空,如果是int类型则会转成整数再相加
3函数的值为:我是一个函数haha
capfirst:首字母大写
<p>首字母的大小写方法:{{ dt.items|capfirst }}</p>
输出结果
首字母的大小写方法:ABc
default:如果变量解析失败,则返回给定的默认值,当value是''空字符串,也会输出默认值。
例子
def func(aa):
return '带参数的函数'
def func():
return '''
def func(aa):
return None <p>解析失败则返回默认值:{{ func|default:"nothing" }}</p>
输出结果
解析失败则返回默认值:nothing
first,last:第一个元素和最后一个元素
<p>列表的第一个元素:{{ lt|first }}</p>
<p>列表的最后一个元素:{{lt|last}}</p>
输出结果
列表的第一个元素:1
列表的最后一个元素:3
slice:切片
<p>我是列表的倒序:{{ lt|slice:"::-1"}}</p>
输出结果:
我是列表的倒序:[3,2,1]
join:连接字符串列表,与str.join(list)一样
<p>把字典的value连接起来:{{ dt.name|join:"xxx"}}</p>
输出结果
把字典的value连接起来:张xxx三
floatformat:浮点数格式化,不指定小数位参数,默认保留一位
value Template Output(结果)
34.23234 {{ value|floatformat}} 34.2
34.23234 {{ value|floatformat:3}} 34.232
length,length_is:返回字符串或列表的长度
<p>列表的长度是:{{ lt|length}}</p>
<p>列表的长度是{{ le|length }}?:{{ lt|length_is:3 }}</p>
输出结果
列表的长度是:3
列表的长度是3吗?:True
lower, upper :字符串中的字符都变小写和大写
<p>字符都变小写:{{ dt.items|lower }}</p>
<p>字符都变大写:{{ dt.items|upper }}</p>
输出结果
字符都变小写:abc
字符都变大写:ABC
title:标题化,首字母大写
<p>title标题化:{{ dt.text|title }}</p>
输出结果:
title标题化:I Am Hua
过滤器可以用链式的方式:
只要能够解析出来,就可以接多个的过滤器
{{func|default:"nothing"|add:"haha"}}
safe:关闭变量的自动转义,使html标签生效,xss跨域脚本攻击
反射型和存储型,因为浏览器会解析css和js,所以django帮我们管理这方面的问题。
js = '<script>alert("1")</script>'
html = '<h3>我是安全的,需要渲染成html</h3>'
<p>{{ html|safe }}</p>
添加了safe后,才会执行这段代码,而不是转义成文本格式。
我是安全的,需要渲染成html
静态文件
settings文件中设置静态文件路径的配置
默认是static,但也可以更改为其他
STATIC_URL = '/static/'
同时在manage文件的当前目录下,创建static文件夹,在其文件下创建app的文件夹,用于管理静态文件(css,js,img等……)
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
静态文件的引入
-硬编码
在css文件夹下创建了同名的css文件。然后在html中的head内引入文件
html代码
<head>
<link rel="stylesheet" href="/abab(和setting中的STATIC_URL对应)/teacher/css/index.css">
</head>
-模板标签,动态解析
在html的首行(第一行代码)
html代码
{% load static %}
<head>
<link rel="stylesheet" href="{% static 'teacher/css/index.css' %}">
</head>
python的Web框架,Django模板变量,过滤器和静态文件引入的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- Python 17 web框架&Django
本节内容 1.html里面的正则表达式 2.web样式简介 3.Django创建工程 Html里的正则表达式 test 用来判断字符串是否符合规定的正则 rep.test('....') ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Python编程Web框架 :Django 从入门到精通
Django是一个高级别的Python Web框架,它鼓励快速开发和干净实用的设计. 现在我们开始学习它. Django学习之 第一章:Django介绍 Django学习之 第二章:Django快速上 ...
- 在python的web框架Django中使用SQL Server
在pycharm中安装 安装pyodbc和Django——pyodbc是一个用python写的ODBC引擎 安装Django-pyodbc-azure 在后方网址中查 ...
- python的web框架---Django项目
Django项目之会议室预预订: 界面效果展示: 1.创建超级管理员,实现预定界面功能 2.预定界面: (一)基于pymysql设计数据表结构,理清前后端与用户交互逻辑.(用户表,会议室表,预定内容存 ...
- Django视频教程 - 基于Python的Web框架(全13集)
Django是由Python驱动的开源模型-视图-控制器(MVC)风格的Web应用程序框架,使用Django可以在即可分钟内快速开发一个高品质易维护数据库驱动的应用程序.下面是一大坨关于Django应 ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
随机推荐
- codeforces 477D
题意:给定一个长度<=5000的二进制字符串S,以及一个初始为0的n,有一下两种操作: 1. 输出n(n>=1并且为2进制形式输出) 2.n=n+1 每次选择一种操作.. 求:1.有多少方 ...
- AngularJS 路由 resolve属性
当路由切换的时候,被路由的页面中的元素(标签)就会立马显示出来,同时,数据会被准备好并呈现出来.但是注意,数据和元素并不是同步的,在没有任何设置的情况下,AngularJS默认先呈现出元素,而后再呈现 ...
- bootstrap table 前端搜索
1.bootstrap-table对于前端的搜索可以通过官网设置,但发现前端搜索出现bug,网上找到一个bootstrap-table的扩充js bootstrap-table-mytoolbar. ...
- UniGUI的TUniLoginForm窗口自定义背景色和背景图片
雨田家园 UniGUI的TUniLoginForm窗口自定义背景色 uniGUI的TUniLoginForm类创建的登录窗口默认是不带颜色,可以自定义css风格来改变背景颜色. 一般是通过在UniSe ...
- ora-12154 TNS:无法处理服务名疑难处理
折腾了几天的PLSQL,终于解决这个问题,在此分享给需要的朋友 服务器:WindowsServer2008(64位操作系统).Win7(64位操作系统) Oracle版本:10.2.0 问题:安装完O ...
- ajax调用WebMethed返回处理请求时出错
ajax post调用WebMethed报错,返回的信息如下: {“Message”:“处理请求时出错”,“StackTrace”:“”,“ExceptionType”:“”} 查了一下WebMeth ...
- 【NumberValidators】工商营业执照号码和统一社会信用代码验证
从本质上讲,工商营业执照号码和统一社会信用代码是两套完全不一样的编码规则,识别结果也仅有行政区划部分为两者共有,但因为这两种编码同时存在的原因,所以如果需要在系统中唯一标志一家企业时,还是可以通过工商 ...
- SpringBoot2 配置
一.Properties与Yaml SpringBoot支持properties与yaml两种配置文件application.properties/application.yml yaml简单使用 1 ...
- mybatis使用中的记录
一: 常用sql语句: sql顺序:select [distinct] * from 表名 [where group by having order by limit]; 查询某段时间内的数据: ...
- js转换数据格式为货币格式
有时候输资金数据的时候如果位数较多就不好读了,如果输完能转换一下格式,转成用“,”隔开的通用格式就比较好看了.自己写了一个备用,以后用到的话就不用再写了. //将数字转换为货币格式,用,隔开 func ...