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. jupyter notebook改变行间图片大小

    jupyter notebook使用起来代码效果很直接,这是我最喜欢的一点,但是主题单一,后来改了一下主题.也可以接受了,但是还有一个问题是显示图片太小我们可以用两个方法来改变它. 一.可以通过rcP ...

  2. 你可能会忽略的 Git 提交规范

    一.为什么需要规范? 无规矩不成方圆,编程也一样. 如果你有一个项目,从始至终都是自己写,那么你想怎么写都可以,没有人可以干预你.可是如果在团队协作中,大家都张扬个性,那么代码将会是一团糟,好好的项目 ...

  3. 【xmind】 使用 Java 生成思维导图

    前言 在日常的工作与学习中,我们经常会使用思维导图这个工具,来把抽象而又无形的思考转换成有形并且具体的图像,是理清思路,梳理逻辑的一大神器. 准确的说,思维导图并不是一个具体的工具,而是一种方法.是道 ...

  4. element-ui组件中的input等的change事件中传递自定义参数

    以select为例,如果select写在循环里,触发change事件时可能不只需要传递被选中项的值,还要传递index过去,来改变同一循环中的其他标签的状态. 下面这样写是无效的: @change=& ...

  5. 【Gradle】自定义Android Gradle工程

    自定义Android Gradle工程 defaultConfig默认配置 defaultConfig是Android对象中的一个配置项,负责定义所有的默认配置.一个基本的defaultConfig配 ...

  6. angularjs路由传值$routeParams

    AngularJS利用路由传值, 1.导包 <script src="angular.min.js"></script> <script src=&q ...

  7. Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口

    RESTful是一种API设计规范.在RESTful架构中,主要使用POST,DELETE,PUT和GET四种HTTP请求方式分别对指定的URL资源进行增删改查操作. RESTful之前的做法: /u ...

  8. php对微信支付回调处理的方法(合集)

    支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答. 对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽 ...

  9. chattr lsattr linux file system attributes - linux 文件系统扩展属性

    我们使用 linux 文件系统扩展属性,能够对linux文件系统进行进一步保护:从而给文件 赋予一些额外的限制:在有些情况下,能够对我们的系统提供保护: chattr命令用来改变文件属性.这项指令可改 ...

  10. optix之纹理使用

    1.在OpenGL中生成纹理texture optix中的纹理直接使用OpenGL纹理的id,不能跨越OpenGL纹理,所以我们先在OpenGL环境下生成一张纹理. 这个过程就很熟悉了: void W ...