Django框架 之 模板语言
Django框架 之 模板语言
浏览目录
- 标签
- 过滤器
一、标签 Tags
1、普通变量
- 普通变量用{{ }}
- 变量名由数字、字母、下划线组成
- 点.在模板语言中用来获取对象相应的属性值
示例:
|
1
2
3
4
5
6
7
8
|
{# 取variable中的第一个参数 #}{{ variable.0 }}{# 取字典dic中key的值 #}{{ dic.key }}{# 取obj_list对象列表中第一个对象的attr属性值 #}{{ obj_list.0.attr }}{# 点操作只能调用不带参数的方法 #}{{ obj_list.0.method }} |
2、逻辑判断
逻辑判断用{% %}
for
- 语法:{% for item in item_list %}...{% empty %}...{% endfor %}
- 作用:循环item_list,如果item值为空或不存在,则会执行empty中的代码,切记要写endfor结束循环
常用for循环参数:
| Variable | Description |
| forloop.counter | 当前循环的索引值(从1开始) |
| forloop.counter0 | 当前循环的索引值(从0开始 |
| forloop.revcounter | 当前循环的倒序索引值(从1开始) |
| forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
| forloop.first | 当前循环是不是第一次循环(布尔值) |
| forloop.last | 当前循环是不是最后一次循环(布尔值) |
| forloop.parentloop | 本层循环的外层循环 |
if
- 语法:
1
{%ifsome_condition%}...{%elifother_condition%}...{%endif%} - 作用:条件判断,切记要写endif结束条件判断
- 常用与if语句结合的判断关键字
1
{%ifsome_condition%}...{%elifother_condition%}...{%endif%}
with
- 语法
|
1
|
{% with new_variable = old_variable %}.....{% endwith %} |
- 作用:定义中间变量
csrf_token
语法:在页面的每个form表单中写上
|
1
|
{% csrf_token %} |
作用:用于跨站请求伪造保护
注释
语法:
|
1
|
{# 注释内容 #} |
3、母板系统
继承
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> {% block page-css %} {% endblock %}</head><body><h1>这是母板的标题</h1>{% block page-main %}{% endblock %}<h1>母板底部内容</h1>{% block page-js %}{% endblock %}</body></html> |
- 语法
|
1
|
{% extends 'base.html' %} |
- 作用:在子页面中在页面最上方使用上面的语法来继承母板
块block
- 语法
|
1
|
{% block block_name %}...{% endblock %} |
- 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容
示例:
|
1
2
3
4
5
|
{% block page-main %} <p>世情薄</p> <p>人情恶</p> <p>雨送黄昏花易落</p>{% endblock %} |
组件
- 语法
|
1
|
{% include 'subassembly.html' %} |
- 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用
4、静态文件相关
在Settings中设置static静态文件夹,在html中导入。
语法:
|
1
|
{% load static %} |
例如:
|
1
2
|
{% load static %}<img src="{% static "images/hi.jpg" %}" alt="Hi!" /> |
引用JS文件时使用:
|
1
2
|
{% load static %}<script src="{% static "mytest.js" %}"></script> |
某个文件多处被用到可以存为一个变量
|
1
2
3
|
{% load static %}{% static "images/hi.jpg" as myphoto %}<img src="{{ myphoto }}"></img> |
使用get_static_prefix
|
1
2
|
{% load static %}<img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" /> |
或者
|
1
2
3
4
5
|
{% load static %}{% get_static_prefix as STATIC_PREFIX %}<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" /><img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" /> |
5、自定义simple_tag
- 作用:可以自定义标签,注册后可使用
自定义simple_tag的步骤(与自定义Filter类似,不过接收更灵活的参数)
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_simpletag.py
custom_simpletag.py中编写自定义simple_tag,例如:
|
1
2
3
4
5
6
|
from django import templateregister = template.Library()@register.simple_tag(name="my_simpletag")def add_simpletag(a,b,c): # 可接收多个参数return "{} + {} + {}".format(a, b, c) |
- 使用自定义simple_tag前,首先在HTML页面中导入py文件
|
1
2
|
{% load custom_simpletag %}{% my_simpletag "1" "2" "3" %} |
6、自定义inclusion_tag
- 作用:返回html代码片段
自定义inclusion_tag的步骤
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_inclusiontag.py
custom_inclusiontag.py中编写自定义inclusiontag,例如:
|
1
2
3
4
5
6
7
8
|
from django import templateregister = template.Library()@register.inclusion_tag('inclusion_tag.html')def my_inclusiontag(n):n = 1 if n < 1 else int(n)data = ["第{}项".format(i) for i in range(1, n+1)]return {"data": data} |
- 在templates文件夹中创建刚才注册的inclusion_tag.html文件
|
1
2
3
4
5
|
<ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %}</ul> |
- 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件
|
1
2
|
{% load custom_inclusiontag %}{% my_inclusiontag 10 %} |
二、过滤器 Filter
1、内置过滤器
语法:
|
1
|
{{ value|filter_name:args }} |
注意:管道符前后没有空格
default
- 语法:
|
1
|
{{ value: default: "自定义内容"}} |
- 作用:如果value值没传的话就显示自定义内容
length
- 语法:
|
1
|
{{ value|length }} |
- 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.
filesizeformat
- 语法:
|
1
|
{{ value|filesizeformat }} |
- 作用:将value格式化为一个 “人类可读的” 文件大小格式
如果 value 是 123456789,输出将会是 117.7 MB。
slice
- 语法:
|
1
|
{{value|slice:"start:end"}} |
- 作用:切片
date
- 语法:
|
1
|
{{ value|date:"Y-m-d H: i:s"}} |
- 作用:将时间格式的value进行自定义格式化
safe
- 语法:
|
1
|
{{value|safe}} |
- 作用:取消Django对HTML标签和JS等语法标签进行自动转义,认为插入的HTML或JS是安全的不必转义
truncatechars
- 语法:
|
1
|
{{ value|truncatechars:num}} |
- 作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。num参数是指截断的字符数
2、自定义过滤器
步骤
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py
在custom_filter.py中编写自定义过滤器,例如:
|
1
2
3
4
5
6
|
from django import templateregister = template.Library()@register.filter(name="my_filter")def my_filter(value, arg): #最多接收两个参数return value.replace(arg, "") |
- 使用自定义filter前,首先在HTML页面中导入py文件
|
1
2
|
{% load custom_filter %}{{ variable|my_filter:"0" }} |
Django框架 之 模板语言的更多相关文章
- 第三百一十节,Django框架,模板语言
第三百一十节,Django框架,模板语言 模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到h ...
- [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)
一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...
- 八 Django框架,模板语言
模板语言就是可以将动态数据在html模板渲染的语言 一.接收值渲染 locals()函数,写在请求响应render()函数里,可以将逻辑处理函数里的变量传到html用模板语言渲染 {{...}}接收一 ...
- Django框架之模板语言特殊标记(将后端的数据显示到前端)
后端代码 def GetMain(request): return render( request, "main.html", { "user1":" ...
- Django(框架、模板)
day65 参考:https://www.cnblogs.com/liwenzhou/p/8296964.html Django框架的设计模式借鉴了MVC框架的思想,也是分成三部分,来降低各个部分之间 ...
- Django框架2——模板
django框架2--模板 直接将HTML硬编码到你的视图里却并不是一个好主意: 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改. 站点设计的修改往往比底层 Python 代码的修 ...
- Django框架04 /模板相关、别名/反向解析/路由分发
Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...
- Django框架之模板语法【转载】
Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...
- Django补充之模板语言
路由系统 Django页面详情以及分页 举个例子: 有一组后台数据,需要展示到页面上,但由于数据量较大,那就需要做分页了吧,那么怎么才能将页面详情和分页都融合进去呢,Django里的路由系统加上正则表 ...
随机推荐
- wpf中将string格式的颜色转换成color类型
wpf中Brushes有很多对应的颜色,先盗张图,每个颜色对于的名称和ARGB值有了,问题是有时候我们取到的颜色是ARGB值,而且是string类型的,该怎么转换成color呢,只有转换成color之 ...
- CH5702 Count The Repetitions[倍增dp]
http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%B ...
- python if语句,while语句
一,if语句: python中最常用的判断语句,基本格式: 1.if else格式 if 条件: 结果 else: 结果 """ if 条件: 满足条件执行代码 els ...
- oracle中merge的用法,以及各版本的区别 Create
Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令,通过这个merge你能够在一个SQL语句中对一个 ...
- [推荐]InfoQ上的深入浅出Node.js的系列文章
InfoQ上的深入浅出Node.js的系列文章 详情如下链接:http://www.heiboard.com/?p=2081
- Hibernate检索方式(转载)
我们在项目应用中对数据进行最多的操作就是查询,数据的查询在所有ORM框架中也占有极其重要的地位. 那么,如何利用Hibernate查询数据呢?Hibernate为我们提供了多种数据查询的方式,又称为H ...
- 蓝桥杯 算法训练 ALGO-156 表达式计算
算法训练 表达式计算 时间限制:1.0s 内存限制:256.0MB 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输 ...
- 四川第七届 I Travel(bfs)
Travel The country frog lives in has nn towns which are conveniently numbered by 1,2,…,n1,2,…,n. Amo ...
- Mysql 5.6 MHA (gtid) on Kylin
mha on Kylinip hostname repl role mha role192.168.19.69 mysql1 master node192.168.19.73 mysql2 slave ...
- 单片机RS485通信接口、控制线、原理图及程序实例
RS232 标准是诞生于 RS485 之前的,但是 RS232 有几处不足的地方: 接口的信号电平值较高,达到十几 V,使用不当容易损坏接口芯片,电平标准也与TTL 电平不兼容. 传输速率有局限,不可 ...