模板标签

模板是由HTML代码和一些逻辑控制代码组成的,逻辑控制代码除了前面介绍的变量和过滤器,还要一个非常重要的模板标签。模板标签的语法规则是{% tag %},模板标签在渲染的过程中能提供任意的逻辑关系,模板标签一般都有着与之对应的结束标签,其标签名为在原来的标签名前加上end。下面介绍下一些常用的模板标签。

  • {% if/elif/else %}

条件标签用于判断,可以使用and,or,not,in等等来组织你的逻辑,但不允许and和or同时出现的条件语句中。

  • {% ifequal %}、{% ifnotequal %}

比较是否相等,只限于简单的类型,比如字符串、整数、小数的比较,列表、字典、元组不支持。

  • {% ifchanged %}

检查一个值是否在上一次的迭代中改变,也可以配合else来写入未改变所执行的语句。

  • (% for in %}

跟python的for循环用法是一样的,但不同的是模板中的for循环的迭代次数不能靠下标来获取,只能通过循环参数来获取,下图是一些常用的循环参数。

  • {% for ... %} {% empty %}

for ... empty用于在for循环取到空值时再执行empty内的语句。

  • {% load ... %}

load用于加载第三方标签,常用于静态文件的引用中,如{% load static %}。

  • {% url ‘name' %}

url标签是通过name来引入路由配置的地址,返回url的绝对路径,还可在name空格后面添加参数。

  • {% with 变量名 as  别名 %}

用更简单的变量名缓存复制的变量名。

  • {% autoescape off %}

这个标签用于关闭自动转义,类似于过滤器safe。

  • {% comment %}

comment用于多行注释标签,要注意的是comment标签不能嵌套使用。{#  #}用于单行注释

  • {% block  ’content' %}

block标签可以被子模板覆盖.查看,这里的content是名称,在下面介绍模板继承时会用到这里。

  • {% extend 模板路径 %}

extend用来指定当前模板是继承自哪个模板的。

  • {% cycle 元素1 元素2 ... %}

cycle标签常用在for循环中,每当这个标签被访问,则传出一个它的可迭代参数的元素。第一次访问返回第一个元素,第二次访问返回第二个参数,以此类推.一旦所有的变量都被访问过了,就会回到最开始的地方,重复下去。

传递一个模板变量li = [1,2,3,4]给for循环,迭代四次cycle标签,效果如下。

{% for i in li %}  这是第{{ i }}次迭代: {% cycle 'sky' 'run' 'water' %}  <br>{% endfor %}
这是第1次迭代: sky
这是第2次迭代: run
这是第3次迭代: water
这是第4次迭代: sky 

元素不仅可以是自己写的字符串,还可以是模板变量。下面传递三个模板变量给cycle标签。

{% for i in li %}这是第{{ i }}次迭代: {% cycle tel sex li %}  <br>{% endfor %}
这是第1次迭代: 12580
这是第2次迭代: girl
这是第3次迭代: [1, 2, 3, 4]
这是第4次迭代: 12580 

被包含在cycle中的变量将会被自动转义,从而使包含在变量中的标签对失效。若传递'b':'<b> hello world </b>','i':'<i>i am well </i>', 如下所示:

{% for j in li %}这是第{{ j }}次迭代: {% cycle b i %}  <br>{% endfor %}
这是第1次迭代: <b> hello world </b>
这是第2次迭代: <i>i am well </i>
这是第3次迭代: <b> hello world </b>
这是第4次迭代: <i>i am well </i>

我们可以通过autoescape标签来关闭自动转义,如下所示:

{% for j in li %}这是第{{ j }}次迭代:{% autoescape off %} {% cycle b i %}  {% endautoescape %}<br>{% endfor %}

我们也可以连续引用一个当前循环的值,要达到这个目的,只需使用“as”来给{% cycle %}一个别名,当要再次引用当前循环值时只需输入其别名即可。当要进入下一循环值可cycle一次别名即可。

如果你只是想要声明cycle,但是不产生第一个值,你可以添加一个silent关键字来作为cycle标签的最后一个关键字。

{% cycle 'sky' 'run' 'water' as huge silent %}  <br>
{% for i in li %}这是第{{ i }}次迭代: <br>别名的变量是:{{ huge }} <br>{% cycle huge %}  <br>{% endfor %}
这是第1次迭代:
别名的变量是:sky 这是第2次迭代:
别名的变量是:run 这是第3次迭代:
别名的变量是:water 这是第4次迭代:
别名的变量是:sky 

模板继承和引用

往往一个网站的不同网页都有着许多相同或相似的地方,模板的继承可以让你创建一个基本的骨架模板,然后使其他模板可以继承它。一个模板要想能被其他模板所继承,那么对于继承的部分就要使用block标签来囊括。对于子模版来说,继承其他模板的标签是extend,{% extend 模板路径 %},该标签必须是模板中第一个出现的标签,类似于python导包,一般都是放在首行。

子模版对于父模板中的block标签内的内容,即可继承,也可以自己修改。说到底,子模板的继承其实就是 替换掉 父模板中同名的block块,其余没有被替换掉的就被子模板原封不动的继承了下来。这里要注意的是,block中,前面的百分号的后面需要有空格,后面的百分号前面需要有空格。必须按格式来,否则模板引擎会识别不了 。

在子模版中,在其对应的block中,不仅可以修改从父模板继承下来的内容,也可以在修改后的基础上,利用block.super变量再次提取父模板的这块内容。在子模版的block中,不仅可以自己修改内容或提取父模板的内容,还可以引用其他模板的内容,引用的标签是include

这里要注意的是,子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。

下面是子模版的代码

{% extends 'book/test.html' %}{% block content %}
这是子模版的主页 <br>这里再调用父模板的内容:{{ block.super }}
{% endblock %}
{% block xxx %}
{% include 'book/imp.html' %}
{% endblock %}

下面分别是父模板和被引用模板的代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title> {% block title %}主页面{% endblock %}</title><style>* {padding: 0;margin: 0;background-color:white;}div {width:200px;background-color: palegreen;}</style>
</head>
<body>
{% block content %}<p>这是一个书店主页</p> {% endblock %}
<div>{% block text %} 这是所有页面都有的部分 {% endblock %}
</div>
{% block xxx %} <i>这是演示部分</i>{% endblock %}
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>xxx</title><style>* {padding: 0;margin: 0;}</style>
</head>
<body>
这是被引用的部分</body>
</html>

子模版渲染效果如下:

静态文件引用

静态文件一般指的就是js文件、css文件、存放图片的image等,首先我们可以在项目下创建一个static目录,再在其下分别创建三个子目录,分别是css、js、image。然后在settings文件下进行配置,添加一个STATICFILES_DIRS 设置静态文件目录路径,同templates。

引用静态文件,选加载静态文件的目录static,使用load标签。然后对于js文件引用及css和图片的引用于前端是一样的,只是在输入文件路径时用static标签来引入。下面是一个小例子。

转载于:https://www.cnblogs.com/longwhite/p/10397673.html

Django模板渲染——(二)相关推荐

  1. Django—模板渲染

    参考文档: http://www.cnblogs.com/fnng/p/4373108.html https://code.ziqiangxuetang.com/django/django-intro ...

  2. Django的模板渲染(render)机制

    2019独角兽企业重金招聘Python工程师标准>>> 一旦你创建一个 Template 对象,你可以用 context 来传递数据给它. 一个context 是一系列变量和它们值的 ...

  3. Django学习笔记之模板渲染、模板语言、simple_tag、母版子版、静态配置文件

    一.首先我们用PyCharm来创建一个Django项目 终端命令:django-admin startproject sitename 图形创建: 这样一个Django项目就创建完成了,上面可以看到项 ...

  4. flask mysql项目模板渲染_Flask系列(二) 模板 templates

    BEGIN: 在前面,我们简单的实现了第一个简单的flask项目,但是这个项目只是单纯的在网页上显示一句话,没有任何其他的东西,很是单调.这里,我们即将学习Flask的模板.相信了解过django的人 ...

  5. Django模板层:DTL模板渲染-变量

    一.模板渲染 render(request, template_name, context=None, content_type=None, status=None, using=None) 返回一个 ...

  6. django模板过滤器

    django模板&过滤器 声明:部分信息来源这篇博客https://www.cnblogs.com/maple-shaw/articles/9333821.html MVC: 模型(model ...

  7. Django 3.2.5博客开发教程:体验django模板

    上面我们有说过,用户发送请求的时候,视图会返回一个响应,响应可以是一个重定向,一个404错误,一个XML文档,一张图片或者是一个HTML内容的网页.前面几个返回的信息比较有限,我们重点更多是放在HTM ...

  8. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数:request对象request.path 请求路径request.GET GET请求数据 QueryDict {}request.POST POST请求数据 QueryDic ...

  9. Python全栈:Django模板

    文章目录 1 模板引擎介绍和选择 2 Django模板相关配置 templates相关配置 3 模板变量的使用 渲染静态图片 渲染 Python中的对象 4 模板标签的使用 循环控制 条件控制 模板注 ...

最新文章

  1. python qq签到_Python开发qq批量登陆
  2. CDOJ1633 Video Game Combos [AC自动机+dp]
  3. 图像处理之边缘检测概述
  4. 安卓手机获取基站信息
  5. t3 修改服务器配置,t3如何修改服务器地址
  6. CF618F-Double Knapsack【结论】
  7. 前端学习(86):标签嵌套规范
  8. 使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作
  9. 【jQuery笔记】新浪微博案例笔记
  10. python数据分析报告范文_Python数据实战分析之定量和定性数据分析
  11. linux sd卡空间,充分利用树莓派中的SD卡空间
  12. oracle 归档日志激增,一次归档日志激增的分析.
  13. matlab IIR滤波
  14. 儿童python编程书籍推荐_推荐给家长们的《趣学Python——教孩子学编程》书
  15. 安装GNOME3桌面并设置开机启动图形界面
  16. 2022年高考送祝福,金秋9月,CSDN等你哦!
  17. html颜色主题,16 种更好看的 WEB 默认标准色 colors.css
  18. 2021年全球高级相变材料(PCM)收入大约1513.7百万美元,预计2028年达到3220.4百万美元
  19. Multi-armed Bandit Experiments
  20. android 事例源码 搜集

热门文章

  1. nio的应用 java_Java NIO 在网络编程中的应用
  2. sap 发送mesage_SAP的message机制
  3. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++
  4. 用strings命令查看kafka-log内容 过滤二进制编码
  5. HDU 5025:Saving Tang Monk(BFS + 状压)
  6. C#的static constructor抛了异常会怎么处理?
  7. Alexa 网站排名
  8. QT中信号和信号槽详解
  9. c#中程序以管理员身份运行的三种办法
  10. 客户端与服务端的TCP通信实现(Qt)