djano-模板层基础知识
########模板层########
模板层其实就是templates文件夹里的html文件
其实这里的每个html不是真正意义的上html代码,只有经过模板渲染过后才算的上真正的html页面。 一、模板语言(变量,深度查询,过滤器,标签) 1、变量
在django模板里通过{{ name }} 表示一个变量,name就是一个变量名
首先我们要明白这个变量是怎么传出来的,
在视图层:
return render(request,'index.html',local())
#local()就把当前视图函数的变量全部传到index.html模板中,这样就不要我们写太多代码了,但是
#也有缺点,就是把一些不需要渲染的变量也传了过去。
模板层:
当程序读到{{开头,一直读到}}结尾,这里会有一个变量值,就会去名称空间里找相应的变量。这其实
和我们之前写socket写服务端一样的,读取文件,再用相应的变量去替换掉符合条件的字符串。
好了好了,说说变量吧,记住一点就行:{{name}} ----> 相当于在python中执行了print(name)操作
你记住这个就行了!!!,这就是精髓。下面我就写写伪代码吧,
name = 'zhuyu' #视图层定义的变量
{{ name }} #在前台页面显示 zhuyu 后面我就不写注释了 list = [1,2,3,['hello','word']]
{{ list }} ---------> [1,2,3,['hello','word']] def run():
return 'run go'
{{ run }} ---------> 'run go' #这里我说下,在python中我们打印print(run),显示的函数的内存地址,
#会出现'run go',只能说明模板中执行函数,打印了它的返回值。 zhuyu = User('zhuyu',19) #这里是User是一个类
{{ zhuyu }} --------> '<app01.views.index.<locals>.People object at 0x0000028D4DDDB240> '
#你在python中,打印一个对象,执行__str__,他的返回值就上面这个,所以说,看下面 {{zhuyu.get_name}} -----> 'zhuyu '
#这是调用对象的方法,也是执行方法,打印的是它的返回值 总结:1、{{ 变量名 }} 其实就是执行print操作
2、假如该变量是一个函数,或者对象的函数属性,就是帮你执行,打印执行后的返回值
3、不能打印带参数的函数,方法,这里要小心!!!! 2、过滤器
{{ 'name'|length }} 这是一个参数的过滤器
{{ 'zhu'|add:'yu' }} 这是两个参数的过滤器 总结:|前是第一个参数,后面就是过滤器,冒号(:)就是第二个参数,
记住只能传两个参数,如果你想传多个参数的话,你可以为第二个参数写上指定的格式比如('a:b:c'),然后拿到该参数,也是就一个字符串,进行split(':')操作,这样你就拿到一个列表了,相当于你第二个参数传了三个参数,对不对。其实方法有很多的,看你自己怎么写了。 3、标签
{% %} ------> 表示一个标签,他是和变量、过滤器是有差距的,看也看得出来。
for循环:
{%for foo in foos%}
{% endfor %} if判断:
{% if %}
{% endif %} with(相当于给一个复杂的变量名赋别名):
{% with asdasdasdsa as as%}
{% endwith %} 总结:1、这些不都不用多说了,学过python,这些再清楚不过了,记住它的语法规定就行了,for循环,if判断,with都和python差不多。对了,for循环里有一个对
象,forlorp,是不在记不住你就在循环里打印看看是什么就好了
2、哦哦,还有不是if判断,它判断的条件可以是过滤器,过滤器就是判断它的返回值嘛,但不可以是标签,没有为什么。 4、自定义过滤器,标签
(1)、首先在app文件中新建一个文件夹(包),名字必须为templatetags
(2)、在该文件夹中新建py文件,名字随便你取:例如tags.py
(3)、在py文件中导入模块,并且实例化一个对象,名字必须为register
from django.template import library
register = library()
(4)、继续在该文件中写的函数,过滤器,标签其本质也是一个函数,但是你写的函数必须要有装饰器,这样才能成为过滤器,标签。
@register.filler(name='add') #这样写这个函数才是一个过滤器,对就是过滤器,name='add',给过滤器命名
def my_add(value1,value2):
return value1+value2 @register.tag('add1') #这样写该函数才是标签,就是在上面加装饰器
def add_str(value1,value2,value3):
return value1+value2+value3 (5)、上面的步骤,我们只是注册了过滤器,标签,想要使用的话,必须要在模板中导入
{% load tags %} #这里的tags就是你新建的py文件
{{ 'zhuyu'|add:'nb' }} #这里add就是我之前自定义的过滤器,不要在add 名字和已有的模板标签重名说到重名,我现在有个想法,它到底是执行django自带的过滤器,还是我定义的呢?这肯定是由先后的,自己去试试。
{% add1 'zhuyu' 'nb' '!'%} #这里这个add1标签必须传多个参数,用空格去区别。 5、对了差点忘了深度查询
对于列表,字典在python中我们是怎么去取值的呢?
name = ['zhuyu','zhanghao','daisongbai','wuyang','yangpeng']
info_dic = {'name':''zhuyu,'age':21} 取列表的第二个元素: name[1]
取字典key为name: info_dic[name] 但是在模板中,是没有[]的,那么我们该怎么去取呢?
我们同一使用.,千万别看漏了小数点,我们用.去取值
取列表的第三个元素: name.3 #这是在模板中记住
取字典的key为age: info_dic.age 深度查询其实很简单,你可以一直.下去。 今天就更新结束,哈哈,我只是通过讲话的方式,来记录一些知识点。
djano-模板层基础知识的更多相关文章
- thymeleaf模板引擎基础知识
一.表达式 分为四类: 1.变量表达式 ${} :获取容器上下文变量的值. 举例: 获取application域中的username: ${application.username} 获取sessio ...
- OSI七层模型基础知识及各层常见应用
OSI Open Source Initiative(简称OSI,有译作开放源代码促进会.开放原始码组织)是一个旨在推动开源软件发展的非盈利组织.OSI参考模型(OSI/RM)的全称是开放系统互 ...
- Django模板层学习笔记
一. 前言 Django模板层的知识包括标签.过滤器.自定义标签.自定义过滤器以及inclusion_tag,最重要的是模板的继承和导入. 首先模板层最重要的是模板语法,之前我们提过涉及到变量用模板语 ...
- Python黑帽编程3.0 第三章 网络接口层攻击基础知识
3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...
- Django模板-基础知识
上一篇中带参数的URLconf虽然可以做到传参动态显示内容,但是最终现实的内容还是硬编码到Python代码中的 def hours_ahead(request,phours): try: phours ...
- TCP/IP协议(一)网络基础知识 网络七层协议
参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...
- 软件开发架构、网络基础知识、osi七层模型
一.软件开发的架构 涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq.微信.网盘.优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度.知乎.博客园等使用浏览器访问就可以 ...
- 互联网基础知识------OSI七层网络模型梗概
OSI七层模型 七层网络结构: 应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 一般也作五层 应用层.传输层.网络层.数据链路层.物理层(实体层) 引申问题:TCP/IP协议与http协议 ...
- Django基础之视图(views)层、模板层
目录 Django基础之视图(views)层.模板层 JsonResponse 向前端返回一个json格式字符串的两种方式 重写Django中的json的某个方法 form表单上传文件 FBV与CBV ...
随机推荐
- 搭建一个最简单的node服务器
搭建一个最简单的node服务器 1.创建一个Http服务并监听8888端口 2.使用url模块 获取请求的路由和请求参数 var http = require('http'); var url = r ...
- 02.for循环
语法: for(表达式1;表达式2;表达式3) { 循环体; } 练习1: namespace _02.for循环的练习01 { class Program { static void Main(st ...
- MySQL8.0加载文件内容报错: ERROR 1148: The used command is not allowed with this MySQL version
mysql数据库将文件内容加载到表中报错: mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINAT ...
- MySQL出现时区错误的解决方法
目录 环境 问题 分析 解决方法 环境 windows10 MySQL 8.0.13 IDEA 问题 The server time zone value 'Öйú±ê׼ʱ¼ä' is unre ...
- OLEDB 枚举数据源
在之前的程序中,可以看到有这样一个功能,弹出一个对话框让用户选择需要连接的数据源,并输入用户名和密码,最后连接:而且在一些数据库管理软件中也提供这种功能--能够自己枚举出系统中存在的数据源,同时还可以 ...
- Web前端面试指导(十):元素定位有哪些?
本题点评 在web前端中,元素定位是必须掌握的,是网页制作的必备技能,也是衡量是否为一个合格的web前端开发的标准之一,在网页设计中,很多地方都需要使用定位,例如菜单弹出,提示信息层等都需要定位.所以 ...
- 编写可维护的 Gruntfile.js
load-grunt-tasks 插件 首先介绍下 load-grunt-tasks 这个插件. 我们一般都会把所有用到的插件以及插件的配置写到 Gruntfile.js 里面,对于小项目来说这个文件 ...
- vue+axios+easy-mock+element-ui实现表格分页功能
废话不多,效果如图: LineSource.vue文件内代码如下: <template> <div class="c-main auth userControl" ...
- Stage4--Python面向对象
说在前面: Stage1-Stage4简单介绍一下Python语法,Stage5开始用python实现一些实际应用,语法的东西到处可以查看到,学习一门程序语言的最终目的是应用,而不是学习语法,语法本事 ...
- SQL注入和XSS攻击的原理
8.4 Web跨站脚本攻击 8.4.1 跨站脚本攻击的原理(1) 跨站脚本在英文中称为Cross-Site Scripting,缩写为CSS.但是,由于层叠样式表 (Cascading Style ...