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标签--模版导入 ''' 前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的 如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字( ...
随机推荐
- Fu+ 后台管理 (Thinkphp)
简要:小主从事PHP二年,期间一直做后台;为此向大家分享我制作一个后台(权限),希望能够跟各位PHP大神学习探索,如果有不对或者好的建议告知下:*~*! 1. 介绍 Fu+ 后台管理,是本人基于H+好 ...
- [Luogu4175][CTSC2008]网络管理Network
又是权限题qwq 一句话题意:带修改树上路径第k大 sol 数据结构?还是再见吧.学一手合格的整体二分,只有思维强大,才能见题拆题. 如果你做过整体二分的动态区间第k大就会发现这是一样的题. 无非是区 ...
- (1)Deep Learning之感知器
What is deep learning? 在人工智能领域,有一个方法叫机器学习.在机器学习这个方法里,有一类算法叫神经网络.神经网络如下图所示: 上图中每个圆圈都是一个神经元,每条线表示神经元之间 ...
- Linux tar包安装Nginx-1.7.6 (yum方式安装依赖)
1.首先安装依赖包(依赖包有点多,我们采用yum的方式来安装) yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel ...
- Eclipse Web项目配置
1.每次重开workspace都要重新配置一次 2.new web project之前配置 3.Windows-Preferences-(所有都要记得Apply) General Maven P. ...
- 洛谷 P1146 【硬币翻转】题解
很久很久之前做过的一道题 翻n-1枚硬币,就是有一枚不翻,也可以理解为翻一枚 直接上程序,看程序说话 #include<iostream> using namespace std; ; b ...
- unity(c# ioc框架) 使用总结
这里的unity指的是完成依赖注入的unity而不是游戏引擎. 原本项目完成依赖注入用的是spring.net,但是spring.net已经很久没人维护了,所以微软官方推出的Unity成为了替代spr ...
- 3.21电脑重装“operation not found system ”和xp分盘”分配表有标记为已使用的未用簇”
问题一.是用光盘重装系统后重启,提示operation not found system ①考虑是系统问题,没装好,还是引导文件丢失;换新盘装,若还是一样; ②分析认为是分区问题,必须是活动分区+主分 ...
- 微信小程序学习笔记(阶段二)
二阶段学习过程: (一)看官方文档的框架.组件.API:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看极客学院第3.4章视频:http://www.ph ...
- ~psd面试 求最长回文序列 DP求解
链接:https://www.nowcoder.com/acm/contest/90/D来源:牛客网 掌握未来命运的女神 psd 师兄在拿了朝田诗乃的 buff 后决定去实习. 埃森哲公司注册成立于爱 ...