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.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...
随机推荐
- 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能
最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...
- ASP.NET中的身份验证
身份验证方式windows passport form none授权allow 允许deny 拒绝特殊符号 *代表所有用户 ?代表匿名用户跳转配置<system.web><autho ...
- 【NOI 2011】阿狸的打字机
Problem Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有 \(28\) 个按键,分别印有 \(26\) 个小写英文字母和 B . P 两个字母. ...
- 如何解决eclipse远程服务器上面的Rabbitmq连接超时问题?
1.嗯,问题呢,就是一开始安装好RabbitMQ,练习了一下RabbitMQ的使用,但是呢,过了一段时间,我来复习的时候,发现运行出现下面的错误了.后来想想,是自己学习微服务的时候,修改了/etc/h ...
- C#_.NetFramework_Web项目_EXCEL数据导出
[推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出] 项目需引用NPOI的NuGet包: A-2:EXCEL数据导出--Web项目--C#代码导出 ...
- .net core 日常学习第一篇
使用vs 2015 update3 版本,安装sdk:https://dotnet.microsoft.com/download 可以运行 .net core 1.x版 或者使用vs 2017及以上 ...
- 在python操作数据库中游标的使用方法
cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetcho ...
- 原生js获得八种方式,事件操作
08.17自我总结 关于js 一.原生js获得八种方式 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTa ...
- CAD转DXF怎么转换?教你三种转换方法
CAD图纸在我们日常生活中都是可见到的,因为CAD图纸文件的格式是多样的,在工作中就需要经常将CAD的格式进行转换.那CAD转DXF怎么转换呢?这个问题很多的小伙伴们都遇到过,下面小编就来教大家三种转 ...
- 设计好的报表是如何在 web 上显示的
润乾报表主要用来开发在 java web 端呈现的报表工具,设计器为桌面版,那么开发后的报表如何发布到 web 端是用户较为关心的问题. 润乾报表 web 端发布,采用 Taglib 方式,只需要在 ...