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标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
随机推荐
- AndroidStudio 集成litepal 报错
E/AndroidRuntime(24972): org.litepal.c.b: can not find a class named org.litepal.model.Table_Schema ...
- 【BZOJ3172】单词(AC自动机)
[BZOJ3172]单词(AC自动机) 题面 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...
- js对象的合并
问题情况:将2个或2个以上对象(object{....})中的属性进行合并,即最后合并为一个object{.....}传递给后端. 问题场景:多页表单数据的一同提交 解决办法:Object.assig ...
- ajax错误处理 500错误
在使用ajax请求的时候 ,如果服务器返回的是500错误,或者其他非正常的http错误状态码时 会提示下面的错误 而我们需要把错误信息处理出来 $.ajax({ type:'get', url:&q ...
- 自动化之路 Graphite监控上手指南
自动化运维怎能少了监控,推荐Graphite监控,下面是配置地址 http://www.infoq.com/cn/articles/graphite-intro/ Graphite官网 http:// ...
- comfirm 方法显示对话框
comfirm 方法显示对话框 原理: confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 confirm(message): message:要在 window 上弹出的对 ...
- SignalR Self Host+MVC等多端消息推送服务(4)
由于工作太忙,一直没时间更新博客,之前有很多朋友一直问我什么时候将后续的代码发上来,一直没时间,今天就长话短说,不写文章了,直接上demo,里面将正式项目中用到的一些敏感信息修改了,要使用的话下载后自 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- Java内存区域之程序计数器--《深入理解Java虚拟机》学习笔记及个人理解(一)
Java虚拟机程序计数器 在书上的P39页 程序计数器干嘛的? 有了它,字节码解释器才可以知道下一条要执行的字节码指令是哪个. 无论是取下一条指令还是分支.循环.跳转.中断.线程恢复,都需要这个程序计 ...
- 微信小程序学习笔记(阶段一)
一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...