django4-模板进阶
1.模板系统的语法
引用变量数据: {{ }}
标签逻辑操作:{%...%}
2.变量
变量名由字符数字下划线组成 ,可以执行由视图函数传过来的对象的方法和属性 ,但是视图函数中如果使用 ' . ' 执行对象的方法无法传参
#views.py
def test(request):
lst = []
dit = {} class person:
def __init__(self, name, age):
self.name = name
self.age = age def echo(self):
return '{}*{}岁'.format(self.name, self.age) def __repr__(self):
return self.name
p1 = person('qgw', 12)
p2 = person('gwq', 15)
lst.append(p1)
lst.append(p2) dit['p1'] = p1
dit['p2'] = p2
return render(request, 'test-n.html', {'l': lst, 'd': dit,'p1':p1})
#模板语法 ,不能使用括号() ,所以无法传参 列表
{# 取列表中的第一个参数,与后端索引类似 #}
{{ l.0 }} 字典
如果有键是keys ,那么优先级为先找键 ,再去找属性方法
{# 根据字典的key取值 #}
{{ d.name }}
{# 字典的方法items取出kv对 ,keys取出所有的k ,values取出所有的v #}
{{ d.items }} {{ d.keys }} {{ d.values }} 对象相关
{# 友好打印列表,返回一堆内存地址,这个调用了__repr__方法 ,重构repr即可 #}
{{ p1 }}
{# 取对象的name属性 #}
{{ p1.name }}
{# .操作只能调用不带参数的方法 #}
{{ p1.echo}}
3. 变量二次处理
变量可以使用管道做二次处理 ,过滤器是一些已经定义好的处理方法 ,管道可以有多个处理多次
语法: {{ 变量|filter_name:参数 }}
default #给变量设置默认值
add #把变量拼接与参数
length #把变量的长度打印出来 ,不能对int类型操作
slice #切片
first #第一个元素
last #最后一个元素
date #将日期格式化
truncatechars #保留指定长度字符串 ,后续变为...
safe #如果是代码 ,不加safe默认是不执行的 ,以字符串显示 ,加了这个就可以执行
4.标签逻辑操作
常用逻辑有 for if with csrf_token url ,可以使用tab键补全格式
1) for循环
for循环内部可以使用的一些方法
forloop.counter #打印本次循环是第几次
forloop.counter0 #打印本次循环是第几次(从0开始)
forloop.revcounter #倒叙打印本次循环第几次
forloop.revcounter0 #倒叙打印本次循环第几次(从0开始)
forloop.first #如果是第一次循环 ,返回true
forloop.last #如果是最后一次循环, 返回false
forloop.parentloop #打印外层循环 (多层循环使用) ,可以在子循环中使用父循环的forloop的方法
empty #当整个for循环中empty以上代码没有生成 ,则执行empty下面的代码
{% extends 'base.html' %}
{% block body1 %}
<table class="table table-bordered">
{% for objlst in data %}
{% for obj in objlst %}
<tr>
{#将外层循环第一次的内容加上info颜色#}
<td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>
<td>{{ obj.age }}</td>
<td>{{ forloop.counter }}</td>
</tr>
{% endfor %}
{% empty %}
<h1>isnone</h1>
{% endfor %}
</table>
{% endblock %}
2)if判断
if运用比较灵活可以写在一个标签中 ,控制标签的属性 如: "<td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>"
{% extends 'base.html' %}
{% block body1 %}
{% if 10 >= 9|add:2 %} #add是加法和减法
<h2>1</h2>
{% else %}
<h2>2</h2>
{% endif %}
{% endblock %}
3)with别名
with别名区域 ,在指定区域中一个变量可以通过别名方式引用
{% extends 'base.html' %}
{% block body1 %}
{{ zheshiyige_obj.name }} {#别名方式#}
{% with zheshiyige_obj as obj %}
{{ obj.name }}
{% endwith %}
{% endblock %}
5.模板与继承
模板: 就是一个普通的html页面 ,但是是公共部分 ,有效避免代码重复 ,写多个不同的block块 ,子页面中逻辑的内容放入block中 ,通常css和js的引用也会设计一个block
子页面继承模板方法 :
页面第一行{% extends '模板.html' %}
{% block 块名 %}
{% endblock %}
6.组件
组件也是避免代码重复 ,是一小块代码 ,需要给很多页面使用
组件使用 {% include 'html页面' %}
#zj.html
<h2>这里是oooo</h2> #其他页面引用
{% include 'zj.html' %}
7.静态文件配置名
和路有别名作用差不多 ,为了防止static静态目录名的变更 ,我们将静态目录起个别名放在settings中 ,所有模板中引用静态文件的时候 ,直接使用静态文件别名或相对路径即可
#settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static') #指定静态文件的根目录
] #html页面引用静态文件
{% load static %} #导入静态文件 {% static '相对路径文件名' %} #引用静态文件
django4-模板进阶的更多相关文章
- C++模板进阶指南:SFINAE
C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...
- c++ 之模板进阶
c++中的多态主要体现在模板与继承上. 继承可以理解为有相互关系的不同数据结构的集合. 而模板则是完全独立的数据结构,彼此无需依赖 在函数中使用模板, 可以根据函数传入的参数自动推导类型,从而省略到很 ...
- 【Django模板进阶007】
本节主要讲 Django模板中的循环,条件判断,常用的标签,过滤器的使用 列表,字典,类的实例的使用 循环:迭代显示列表,字典等中的内容 条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问 ...
- Django-4 模板层
你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datet ...
- JavaWeb_(session和application)用户登录注册模板_进阶版
用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...
- JavaWeb_(request和response)用户登录注册模板_基础版
用户登录注册模板进阶版 传送门 用户登录注册模板基础版 登录:当用户登录成功时,跳转到personCenter.jsp,当用户登录失败时,跳转到login.jsp并给出提示 注册:当用户注册成功时,跳 ...
- Elasticsearch基础但非常有用的功能之二:模板
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484584&idx=1&sn=accfb65 ...
- Django自学教程PDF高清电子书百度云网盘免费领取
点击获取提取码:x3di 你一定可以学会,Django 很简单! <Django自学教程>的作者学习了全部的 Django英文的官方文档,觉得国内比较好的Django学习资源不多,所以决定 ...
- Jenkins进阶之自动发送邮件的Default Content设置模板
分享一个简洁实用的Jenkins项目邮件管理系统的"Default Content"设置模板 配置如下: <h1><center><font colo ...
- C++_进阶之函数模板_类模板
C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...
随机推荐
- javascript ES6 新特性之 解构
解构的作用是可以快速取得数组或对象当中的元素或属性,而无需使用arr[x]或者obj[key]等传统方式进行赋值 var arr = [1, 2, 3]; //传统方式 var a = arr[0], ...
- Flutter竟然发布了1.5版本!!!!
2018年2月,Flutter推出了第一个Beta版本,在2018年12月5日,Flutter1.0版本发布,当时用了用觉得这个东西非常好用,对于当时被RN搞的头皮发麻的我来说简直是看到了曙光.而在昨 ...
- Android中的常用控件之进度条(ProgressBar)
ProgressBar的常用属性:style,进度条的样式,默认为圆形,用style="?android:attr/progressBarStyleHorizontal"可以将进度 ...
- mac pro下iterm快捷键(转)
标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...
- git如何合并远程2个分支
1,先检出项目到一个文件夹git clone 2,你检出的项目默认是master,所以现在要查看远程全部分支git branch -a * master remotes/origin/HEAD -&g ...
- Spring Boot 2 单元测试
开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1.8 IDEA新建一个Spring Boot项目后,pom.xml默认包含了Web应用和单元测试两个依赖包.如下 ...
- QT--HTTP图片下载器
QT--HTTP图片下载器 1.http使用前提 QT += core gui network //必须加上network 2.必须头文件 #include <QNetwork ...
- npm i xxxx -D和npm i xxxx-S的区别
npm i xxxx -D 就是 npm i xxxx --save-dev 是把依赖写入进devDependencies对象里面 devDependencies 是开发环境下的依赖,这里是开发环境下 ...
- canvas详解----绘制线条
<!DOCTYPE html> <html> <head> <title>canvas详解</title> </head> &l ...
- charles使用(安装、mock、限速、断点功能)
我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据.或者使用Http ...