Django 模版语法
一.简介
模版是纯文本文件。它可以产生任何基于文本的的格式(HTML,XML,CSV等等)。
模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签。
{% extends "base_generic.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for story in story_list %}
<h2>
<a href="{{ story.get_absolute_url }}">
{{ story.headline|upper }}
</a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}
1.变量
{{ variable }}
{#如果后台 渲染传过来的是字典格式的数据 那么前端页面解析值 dict={"k1":"v1"} 假设传的是{"dict": dict} 前端页面取值 .字典key值#}
<h1>{{dict.k1}}</h1>
2.过滤器
可以通过使用 过滤器来改变变量的显示
格式:
{{ name|lower }}
过滤器参数;
{{ item.content |truncatewords:30 }} <!-- 只显示 content 变量的前30个词 -->
default
{{ value|default:"nothing" }} <!--如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值-->
length
返回值的长度。它对字符串和列表都起作用
{{ value|length }}
filesizeformat
将该数值格式化为一个 “人类可读的” 文件容量大小 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)
{{ value|filesizeformat }}
add
把add后的参数加给value
{{ value|add:"2" }} <!--如果 value 为 4,则会输出 6.-->
capfirst
将变量首字母变大写
{{ value|capfirst }} <!--如果value是test过滤后转为Test-->
cut
移除value中所有的与给出的变量相同的字符串
{{ value|cut:" " }}
dictsort
根据指定的key值对列表字典排序,并返回
{{ value|dictsort:"name" }}
{% for book in books|dictsort:"author.age" %}
* {{ book.title }} ({{ book.author.name }})
{% endfor %}
如给定值为:
[
{'title': '1984', 'author': {'name': 'George', 'age': 45}},
{'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
{'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
]
那么结果为:
* Alice (Lewis)
* 1984 (George)
* Timequake (Kurt)
random
随机返回一个值
{{ value|random }}
如果 value 是 列表 ['a', 'b', 'c', 'd'], 可能输出的是 "b"
slice
切片
{{ some_list|slice:":2" }}
如果 some_list 是 ['a', 'b', 'c'], 输出结果为 ['a', 'b']
truncatewords
字符串截断
{{ value|truncatewords:2 }}
如果 value 是 "Joel is a slug",输出 "Joel is ...".
二.自动HTML转义
默认情况下,Django 中的每个模板会自动转义每个变量的输出。明确地说,下面五个字符被转义:
- < 会转换为<
- > 会转换为>
- ' (单引号) 会转换为'
- " (双引号)会转换为 "
- & 会转换为 &
如何关闭
要控制模板上的自动转义,将模板(或者模板中的特定区域)包裹在autoescape标签 中
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
autoescape标签接受on 或者 off作为它的参数。有时你可能想在自动转义关闭的情况下强制使用它。下面是一个模板的示例:
Auto-escaping is on by default. Hello {{ name }}
{% autoescape off %}
This will not be auto-escaped: {{ data }}.
Nor this: {{ other_data }}
{% autoescape on %}
Auto-escaping applies again: {{ name }}
{% endautoescape %}
{% endautoescape %}
自动转义标签作用于扩展了当前模板的模板,以及通过 include 标签包含的模板,就像所有block标签那样。例如:
{% autoescape off %}
<h1>{% block title %}{% endblock %}</h1>
{% block content %}
{% endblock %}
{% endautoescape %}
{% extends "base.html" %}
{% block title %}This & that{% endblock %}
{% block content %}{{ greeting }}{% endblock %}
三.自定义simple_tag
自定义simple_tag
{% load humanize %}
{{ 45000|intcomma }}
load标签可以接受多个库名称,由空格分隔。例如
{% load humanize i18n %}
5.1 自定义标签代码
自定义模板标签和过滤器必须位于Django 的某个应用中。如果它们与某个已存在的应用相关,那么将其与应用绑在一起才有意义;否则,就应该创建一个新的应用来包含它。
这个应用应该包含一个templatetags 目录,和models.py、views.py等文件处于同一级别目录下,如果目录不存在则创建它——不要忘记创建__init__.py 文件以使得该目录可以作为Python 的包。在添加这个模块以后,在模板里使用标签或过滤器之前你将需要重启服务器。新建 PY文件
切记:目录名一定要是templatetags

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from django import template
from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag
def my_simple_time(v1,v2,v3):
return v1 + v2 + v3
在HTML中写:
{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% my_simple_time 1 2 3%}
</body>
</html>
在自定义simple_tag的html中不能用于if条件作为判断,so引出了自定义过滤器函数
自定义过滤器函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from django import template
from django.utils.safestring import mark_safe
register = template.Library() @register.filter
def detail3(value,arg):
allcount, remainder = arg.split(',')
allcount = int(allcount)
remainder = int(remainder)
if value%allcount == remainder:
return True
return False
在HTML中写:
{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ 23|detail4:"4,0" }}
{% if 23|detail4:"4,0" %}
<h1>123</h1>
{% endif %}
</body>
</html>
Django 模版语法的更多相关文章
- django 模版 语法与使用
目录 django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...
- Django 模版语法与使用
目录 Django 模版语法与使用 django模板语言介绍 (摘自官方文档) 链接 什么是模板? 模板语句的 注释 变量 {{ 变量 }} 点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值 ...
- Django 模版语法 测试环境 ORM单表查询
模版语法 传值 视图函数向前端html页面传值,基本上所有的数据类型都可以渲染在前端页面上. views.py from django.shortcuts import render, redirec ...
- django 模版语法及使用
模版的定义 模版是一个文本,用语分离文档的表现形式和内容,通常用于生成html 模版当中能够使用的python语法非常少,for ,if 之类,还有ifequal,结束的时候也要写endifequal ...
- Django 模版语法 三
使用自定义simple_tag 在 app01 下面创建 templatetags 文件夹,在创建 my_tag.py 文件,内容如下: from django import template fro ...
- Django 模版语法 二
变量的过滤器(filter)的使用 过滤器:upper, lower, first, capfirst 在 views.py 中修改 from django.shortcuts import rend ...
- Django 模版语法 一
创建项目 django_template 和 app django-admin startproject django_template python manage.py startapp app01 ...
- Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关
本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法 模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...
- Django模版语言的复用 1. include标签--模版导入 2.inclusion_tag自定义标签--模版导入 3.母版
include标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
随机推荐
- 让安卓app支持swf的一个播放器,和自己编写的音乐管理程序
jcenter方式导入 在需要用到这个库的module中的build.gradle中的dependencies中加入 dependencies { compile 'com.yhd.hdswfplay ...
- 【POI2001】【HDU1814】和平委员会
题面 Description 根据宪法,Byteland民主共和国的公众和平委员会应该在国会中通过立法程序来创立. 不幸的是,由于某些党派代表之间的不和睦而使得这件事存在障碍. 此委员会必须满足下列条 ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- HTTP架构介绍(2) 缓存
web缓存是自动复制所请求数据并将其保存在本地存储中的设备. 通过这样做, 可以实现: 减少网络流量 消除网络瓶颈 防止服务器超载 减少长距离的响应延迟 因此, 您可以清楚地说, web 缓存可提高用 ...
- Scala学习笔记(二)
Scala面向对象: 类: 声明类(一个源文件中可以包含很多public的类) getter和setter 构造函数(主构造器和附属构造器) 继承(extends) 重写父类方法(override d ...
- IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除
1. 修改Maven的Settings.xml文件添加如下内容 <profile> <id>jdk-1.8</id> <activation> < ...
- 兄弟连PHP培训教你提升效率的20个要点
兄弟连PHP培训教你提升效率的20个要点 用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字 ...
- 目标检测网络之 YOLOv2
YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体. 每个格子预测B个bounding b ...
- protobuf的下载、编译和使用
一 背景 工作中临时需要使用 protobuf v3.0.2 做消息格式转换,折腾了很久才搞定,这里特意做一个记录. 二 准备工作 全程使用的电脑为公司的win7 64位旗舰版,已经预先安装VS201 ...
- 笔记:Maven 项目基本配置
Maven 的基本设置包含项目基本信息和项目信息,基本信息主要用于设置当前包的归属项目.当前项目等,配置文件结构如下: <project xmlns="http://maven.apa ...