Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】


Posted in Python onMay 23, 2019

本文实例讲述了Django框架模板语言。分享给大家供大家参考,具体如下:

模板语言

模板语言简称为DTL(Django Template Language)

模板变量

模板变量名由数字,字母,下划线和点组成,不能以下划线开头。
使用:{{模板变量名}}

def index2(request):
  '''模板加载顺序'''
  return render(request, 'booktest/index2.html')
# /temp_var
def temp_var(request):
  '''模板变量'''
  my_dict = {'title': '字典键值'}
  my_list = [1, 2, 3]
  book = BookInfo.objects.get(id=1)
  #定义模板上下文
  context={'my_dict':my_dict,'my_list':my_list,'book':book}
  return render(request,'booktest/temp_var.html',context)

模板变量可以是字典,列表或者对象。定义好模板上下文之后,用render()函数传递给html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>模板变量</title>
</head>
<body>
使用字典属性:{{ my_dict.title }}
使用列表元素:{{ my_list.1 }}
使用对象属性:{{ book.btitle }}
</body>
</html>

可以看到模板变量都是通过 . 调用的。

模板标签

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>模板标签</title>
  <style>
    .red{
      background-color: red;
    }
    .yellow{
      background-color: yellow;
    }
    .green{
      background-color: green;
    }
  </style>
</head>
<body>
<ul>
  {% for book in books %}
    {% if book.id <= 2 %}
    <li class="red">{{ forloop.counter }}--{{ book.btitle }}</li>
    {% elif book.id >= 5 %}
      <li class="yellow">{{ forloop.counter }}--{{ book.btitle }}</li>
    {% else %}
      <li class="green">{{ forloop.counter }}--{{ book.btitle }}</li>
    {% endif %}
  {% endfor %}
</ul>
</body>
</html>

具体的其他的模板标签可以参考Django官方文档。

过滤器

过滤器用于对模板变量进行操作

date:改变日期的显示格式
length:求长度,字符串,列表,元祖,字典
default:设置模板变量的默认值

格式:模板变量 | 过滤器:参数

date过滤器

<li class="red">{{ book.btitle }}--{book.bpub_date | date:'Y年-m月-d日'}</li>

default过滤器 {{dd | default:'无'}}

模板注释

单行注释:{# 注释 #}

多行注释:{% comment %}

模板继承

不同页面可能有相同的模块,这时候可以使用模板继承减少代码量

base.html内容

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>父模板</title>
</head>
<body>
<h1>导航条</h1>
{% block b1 %}
  <h1>这是父模板b1块中的内容</h1>
{% endblock b1 %}
<h1>版权信息</h1>
</body>
</html>

child.html内容

{% extends 'booktest/base.html' %}
{% block b1 %}
  {{ block.super }}
  <h1>这是子模板b1的内容</h1>
{% endblock b1 %}

在父模板中{% block b1 %} <h1>这是父模板b1块中的内容</h1> {% endblock b1 %}
定义一个预留快,预留块中可以有内容。子模板继承时,{% extends 'booktest/base.html' %}导入,{% block b1 %} {{ block.super }} <h1>这是子模板b1的内容</h1> {% endblock b1 %}写预留块,{{ block.super }}继承预留快的内容。

html转义

通过render()函数传递过来的模板上下文默认是转义的,也就是说我们想传递html语言的时候,实际上传递过来的是字符串,这个时候我们可以通过过滤器关闭转义

{{context | safe}}

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python格式化css文件的方法
Mar 10 Python
浅析Python中else语句块的使用技巧
Jun 16 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
Python抓取框架 Scrapy的架构
Aug 12 Python
浅谈Python处理PDF的方法
Nov 10 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python批量修改文件编码格式的方法
May 31 Python
Linux下安装python3.6和第三方库的教程详解
Nov 09 Python
pytorch 共享参数的示例
Aug 17 Python
YUV转为jpg图像的实现
Dec 09 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
Jupyter Notebook内使用argparse报错的解决方案
Jun 03 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 #Python
Django框架登录加上验证码校验实现验证功能示例
May 23 #Python
python图形工具turtle绘制国际象棋棋盘
May 23 #Python
python os模块简单应用示例
May 23 #Python
python使用turtle绘制国际象棋棋盘
May 23 #Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
May 23 #Python
Python3.8中使用f-strings调试
May 22 #Python
You might like
15个小时----从修改程序到自己些程序
2006/10/09 PHP
php Memcache 中实现消息队列
2009/11/24 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
php生成rss类用法实例
2015/04/14 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
js Function类型
2011/12/04 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
javascript获取网页宽高方法汇总
2015/07/19 Javascript
JavaScript模拟push
2016/03/06 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
[46:03]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python自定义scrapy中间模块避免重复采集的方法
2015/04/07 Python
对Python 文件夹遍历和文件查找的实例讲解
2018/04/26 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
2020/02/06 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
应届生保险求职信
2013/11/11 职场文书
情况说明书格式范文
2014/05/06 职场文书
法人委托书范本格式
2014/09/15 职场文书
2014年学校法制宣传日活动总结
2014/11/01 职场文书
个人汇报材料范文
2014/12/30 职场文书
2015年工商所工作总结
2015/05/21 职场文书
MySQL优化及索引解析
2022/03/17 MySQL