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. 深蓝词库转换2.5发布——支持微软五笔,支持Linux和macOS和更多命令行功能

    最近利用晚上的时间,对很久没有新版本发布的深蓝词库转换进行了版本升级.本次升级主要包含的功能包括: 一.支持Win10自带的微软五笔输入法用户自定义短语的导入导出. 1.在转换输入法词库列表中选择“W ...

  2. ASP.NET中的身份验证

    身份验证方式windows passport form none授权allow 允许deny 拒绝特殊符号 *代表所有用户 ?代表匿名用户跳转配置<system.web><autho ...

  3. 【NOI 2011】阿狸的打字机

    Problem Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有 \(28\) 个按键,分别印有 \(26\) 个小写英文字母和 B . P 两个字母. ...

  4. 如何解决eclipse远程服务器上面的Rabbitmq连接超时问题?

    1.嗯,问题呢,就是一开始安装好RabbitMQ,练习了一下RabbitMQ的使用,但是呢,过了一段时间,我来复习的时候,发现运行出现下面的错误了.后来想想,是自己学习微服务的时候,修改了/etc/h ...

  5. C#_.NetFramework_Web项目_EXCEL数据导出

    [推荐阅读我的最新的Core版文章,是最全的介绍:C#_.NetCore_Web项目_EXCEL数据导出] 项目需引用NPOI的NuGet包: A-2:EXCEL数据导出--Web项目--C#代码导出 ...

  6. .net core 日常学习第一篇

    使用vs 2015 update3 版本,安装sdk:https://dotnet.microsoft.com/download  可以运行 .net core 1.x版 或者使用vs 2017及以上 ...

  7. 在python操作数据库中游标的使用方法

    cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetcho ...

  8. 原生js获得八种方式,事件操作

    08.17自我总结 关于js 一.原生js获得八种方式 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTa ...

  9. CAD转DXF怎么转换?教你三种转换方法

    CAD图纸在我们日常生活中都是可见到的,因为CAD图纸文件的格式是多样的,在工作中就需要经常将CAD的格式进行转换.那CAD转DXF怎么转换呢?这个问题很多的小伙伴们都遇到过,下面小编就来教大家三种转 ...

  10. 设计好的报表是如何在 web 上显示的

    润乾报表主要用来开发在 java web 端呈现的报表工具,设计器为桌面版,那么开发后的报表如何发布到 web 端是用户较为关心的问题. 润乾报表 web 端发布,采用 Taglib 方式,只需要在 ...