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-模板进阶的更多相关文章

  1. C++模板进阶指南:SFINAE

    C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...

  2. c++ 之模板进阶

    c++中的多态主要体现在模板与继承上. 继承可以理解为有相互关系的不同数据结构的集合. 而模板则是完全独立的数据结构,彼此无需依赖 在函数中使用模板, 可以根据函数传入的参数自动推导类型,从而省略到很 ...

  3. 【Django模板进阶007】

    本节主要讲 Django模板中的循环,条件判断,常用的标签,过滤器的使用 列表,字典,类的实例的使用 循环:迭代显示列表,字典等中的内容 条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问 ...

  4. Django-4 模板层

    你可能已经注意到我们在例子视图中返回文本的方式有点特别. 也就是说,HTML被直接硬编码在 Python代码之中. def current_datetime(request): now = datet ...

  5. JavaWeb_(session和application)用户登录注册模板_进阶版

    用户登录注册模板_基础版 传送门 用户登录注册模板进阶版 添加了获得获得当前登录用户信息及存储登录人数 用户登录后,在首页.注册页.登录页显示登录用户信息和存储登录人数信息 目录结构 <%@pa ...

  6. JavaWeb_(request和response)用户登录注册模板_基础版

    用户登录注册模板进阶版 传送门 用户登录注册模板基础版 登录:当用户登录成功时,跳转到personCenter.jsp,当用户登录失败时,跳转到login.jsp并给出提示 注册:当用户注册成功时,跳 ...

  7. Elasticsearch基础但非常有用的功能之二:模板

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484584&idx=1&sn=accfb65 ...

  8. Django自学教程PDF高清电子书百度云网盘免费领取

    点击获取提取码:x3di 你一定可以学会,Django 很简单! <Django自学教程>的作者学习了全部的 Django英文的官方文档,觉得国内比较好的Django学习资源不多,所以决定 ...

  9. Jenkins进阶之自动发送邮件的Default Content设置模板

    分享一个简洁实用的Jenkins项目邮件管理系统的"Default Content"设置模板 配置如下: <h1><center><font colo ...

  10. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

随机推荐

  1. Net Core的API文档工具Swagger

    一.安装swagger 新建一个net core的api项目,通过NuGet安装Swashbuckle.AspNetCore. 二.注册swagger服务 在Startup.cs中注册Swagger生 ...

  2. 通过修改VAD属性破除锁页机制

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 技术学习来源:火哥(QQ:471194425) 注释:因为自己的知 ...

  3. [WPF 自定义控件]使用WindowChrome自定义RibbonWindow

    1. 为什么要自定义RibbonWindow 自定义Window有可能是设计或功能上的要求,可以是非必要的,而自定义RibbonWindow则不一样: 如果程序使用了自定义样式的Window,为了统一 ...

  4. MySQL触发器学习总结

    1.What     触发器是MySQL响应DELETE,INSERT,UPDATE语句前后而自动执行的一条MySQL语句 2.Why(使用情形)     增加一个订单对应库存-1     删除一行在 ...

  5. 选择企业架构实践公开课的指导?TOGAF+ArchiMate+BangEA,EA工作者必学一门公开课

    我发现身边越来越多人谈数字化.谈企业架构,但是感觉谈的总是IT?知道好像不对,但是又好像也无法告诉别人这和传统的IT架构有什么不一样?网上找资料,看了很多也摸不到门路,也不知道别人讲的对不对.对了还好 ...

  6. python监控cpu 硬盘 内存

    import psutil import time import yagmail def sendmail(subject,contents): yag = yagmail.SMTP(user='15 ...

  7. Android Studio如何配置CURL指令一键打包apk上传至蒲公英

    Android Studio如何配置CURL指令一键打包apk上传至蒲公英 第一步:在所需要打包的模块build.gradle文件中加入如下代码: android{ buildTypes { //配置 ...

  8. oracle数据库修改密码有效期,解决ORA-28001: 口令已经失效

    工作中oracle数据库安装完成后,需要修改默认的密码有效期,默认为180天,如果不修改,到期忘记更改密码可能会造成不必要的影响. 两种修改方式pl/sql或者cmd窗口 1.pl/sql修改默认密码 ...

  9. gcc 4.9 编译安装 in Ubuntu 18.04(主要用于在无root权限下,进行更新系统 gcc 版本)

    gcc 4.9 编译安装教程,因为项目编译过程中,需要采用特定的gcc版本来进行编译,所以进行简要记录,进行备忘: 下载:curl -O -L https://mirrors.tuna.tsinghu ...

  10. 008.MongoDB分片群集概念及原理

    一 MongoDB分片介绍 1.1 分片 Mongodb另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足 ...