python框架之Django(3)-模版
常用语法
符号
{{...}} # 变量相关
{%...%} # 逻辑相关
{#...#} # 注释
使用变量
def test(request):
name = '张三'
age = 19
return render(request,'test.html',{'name':name,'age':19})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
name:{{ name }} age:{{ age }}
</body>
</html>
/templates/test.html

result
for循环
def test(request):
name_list = ['张三', '李四', '王五']
return render(request, 'test.html', {'list': name_list})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ list }}
<hr>
{% for name in list %}
{{ name }}
{% endfor %}
</body>
</html>
/templates/test.html

result
使用字典
def test(request):
name_dict = {'firstname': 'zhang', 'lastname': 'san'}
return render(request, 'test.html', {'dict': name_dict})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ dict.firstname }}
{{ dict.lastname }}
</body>
</html>
/templates/test.html

result
使用对象
class Person:
def __init__(self,firstname,lastname):
self.firstname = firstname
self.lastname = lastname def show(self):
return 'my firstname is {},last name is {}'.format(self.firstname,self.lastname) def __str__(self):
return 'person obj name is {} {}'.format(self.firstname,self.lastname) def test(request):
p = Person('zhang','san')
return render(request, 'test.html', {'person': p})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ person.firstname }}
{{ person.lastname }}
<hr>
{{ person.show }}
<hr>
{{ person }}
</body>
</html>
/templates/test.html

result
Filters
语法: {{value|filter_name:params}}
default
当所修饰的变量为空时使用所指定的默认值
def test(request):
v1= None
v2 = '有值'
return render(request, 'test.html', {'v1': v1,'v2':v2})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ v1|default:'空值' }}
<hr>
{{ v2|default:'空值' }}
</body>
</html>
/templates/test.html

result
filesizeformat
文件大小格式化
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ 123456789|filesizeformat }}
</body>
</html>
/templates/test.html

result
slice
切片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ 'abcdefghijklmn'|slice:'::2'}}
</body>
</html>
/templates/test.html

result
date
时间格式化
def test1(request):
from datetime import datetime
now = datetime.now()
return render(request, 'test.html', {'now': now})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ now }}
<hr>
{{ now|date:'Y-m-d H:i:s'}}
</body>
</html>
/templates/test.html

result
safe
不转义输出
def test(request):
a_tag = '<a href="http://www.baidu.com">超链接<a>'
return render(request, 'test.html', {'a_tag': a_tag})
/[app name]/views.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ a_tag }}
<hr>
{{ a_tag|safe }}
</body>
</html>
/templates/test.html

result
truncatechars
显示指定长度字符,多余部分用'...'代替
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{{ 'abcdefghijklmnopqrstuvwxyz'|truncatechars:10 }}
</body>
</html>
/templates/test.html

result
自定义filter
from django import template register = template.Library() @register.filter(name='append')
def add_sb(self, param1):
return '{}{}'.format(self, param1)
/[app name]/templatetags/myfilter.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{% load myfilter %}
{{ '张三'| sb }}
</body>
</html>
/templates/test.html

result
Tags
自定义simpletag
from django import template register = template.Library() @register.simple_tag(name='add_str3')
def my_sum(str1, str2, str3):
return '{}{}{}'.format(str1, str2, str3)
/[app name]/templatetags/mytag.py
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
{% load mytag %} {% add_str3 'a' 'b' 'c' %}
</body>
</html>
/templates/test.html

result
inclusion_tag
from django import template
register = template.Library()
@register.inclusion_tag('show_info_page.html')
def show_info(index):
list = [('张三', '男'), ('李四', '女')]
return {'person': list[index]}
/[app name]/templatetags/mytag.py
<h3>我的名字叫{{ person.0 }}</h3>
<p>性别{{ person.1 }}</p>
/[templates]/show_info_page.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
{% load mytag %}
{% show_info 1 %}
<hr>
{% show_info 0 %}
</body>
</html>
/templates/test.html

result
母版页
block
在母版页中定义一个块让子页面使用
{% block [block name] %}
{% endblock %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
这是母版页的内容
<hr>
{# 定义一个block块让子页面替换 #}
{% block page-main %} {% endblock %}
</body>
</html>
/[templates]/base.html
extends
继承母版页
{% extends '[母版页地址]' %}
{% block [block name] %}
{% endblock %}
{% extends 'base.html' %}
{%block page-main %}
这里是子页面的内容
{%endblock %}

/[templates]/test.html
扩展
forloop的属性
| Variable | Description |
|---|---|
forloop.counter |
当前循环的索引值(从1开始) |
forloop.counter0 |
当前循环的索引值(从0开始) |
forloop.revcounter |
当前循环的倒序索引值(从1开始) |
forloop.revcounter0 |
当前循环的倒序索引值(从0开始) |
forloop.first |
当前循环是不是第一次循环(布尔值) |
forloop.last |
当前循环是不是最后一次循环(布尔值) |
forloop.parentloop |
本层循环的外层循环 |
for...empty
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板测试</title>
</head>
<body>
{% for i in list %}
有值则遍历
{% empty %}
空空如也
{% endfor %}
</body>
</html>
with
定义一个中间变量
{% with total=list.count %}
{{ total }}
{% endwith %}
include
引入指定页
{% include '[页面地址]' %}
<p>in subpage.html</p>
/templates/subpage.html
{% include 'subpage.html' %}
<hr>
in test.html

/templates/test.html
static&get_static_prefix
动态获取静态文件夹别名来拼接静态文件的url
配置如下
STATIC_URL = '/static/' STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static1"),
os.path.join(BASE_DIR, "static2"),
]
要访问项目根目录下文件夹static1里的jquery.min.js文件,原来的写法是:
<script src='/static/jquery.min.js'></script>
使用static的写法是:
<script src="{% static 'jquery.min.js'%}"></script>
使用get_static_prefix的写法是:
<script src='{% get_static_prefix %}jquery.min.js'></script>
也可给路径起一个别名:
<script src="{% static 'jquery.min.js' as jquery_path %}"></script>
<!-- 之后就可以通过别名引入 -->
<script src="{{ jquery_path }}"></script>
python框架之Django(3)-模版的更多相关文章
- python框架之django
python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...
- 第六篇:web之python框架之django
python框架之django python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...
- Python框架之Django学习
当前标签: Django Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0 Python框架之Django学习笔记(十三) 尛 ...
- Python框架之Django的相册组件
Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...
- Python框架之Django学习笔记(十一)
话说上次说到数据库的基本访问,而数据库我们主要进行的操作就是CRUD,也即是做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete),俗 ...
- Python高级进阶(二)Python框架之Django写图书管理系统(LMS)
正式写项目准备前的工作 Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我 ...
- Python框架之Django学习笔记(十二)
Django站点管理 十一转眼结束,说好的充电没能顺利开展,反而悠闲的看了电视剧以及去影院看了新上映的<心花路放>.<亲爱的>以及<黄金时代>,说好的劳逸结合现在回 ...
- Python框架之Django学习笔记(十)
又是一周周末,如约学习Django框架.在上一次,介绍了MVC开发模式以及Django自己的MVT开发模式,此次,就从数据处理层Model谈起. 数据库配置 首先,我们需要做些初始配置:我们需要告诉D ...
- Python框架之Django学习笔记(九)
模型 之前,我们用 Django 建造网站的基本途径: 建立视图和 URLConf . 正如我们所阐述的,视图负责处理一些主观逻辑,然后返回响应结果. 作为例子之一,我们的主观逻辑是要计算当前的日期和 ...
随机推荐
- The thumbprint of same asymmetric key is not same in 'SQL Server Connector for Microsoft Azure Key Vault' 1.0.4.0 and 'SQL Server Connector for Microsoft Azure Key
https://support.microsoft.com/en-us/help/4470999/db-backup-problems-to-sql-server-connector-for-azur ...
- Java基础(二)面向对象(上)
面向对象基础知识 面向对象是相对面向过程而言的 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象 面向对象是基于面向过程的 面向对象的特征: 封 ...
- 【翻译】Apache Shiro10分钟教程
本文为翻译文,原文地址:http://shiro.apache.org/10-minute-tutorial.html 介绍 欢迎来到Apache Shiro的10分钟教程! 通过这个教程,你会明白一 ...
- SQL Server 2016新特性:Temporal Table
什么是系统版本的Temporal Table 系统版本的Temporal Table是可以保存历史修改数据并且可以简单的指定时间分析的用户表. 这个Temporal Table就是系统版本的Tempo ...
- VBA二次学习笔记(3)——批量合并单元格
说明(2018-9-16 22:17:49): 1. 昨天运动会,100米八个人跑了第五,400米五个人跑了第三,得了个榨汁机.终于结束了哈哈哈!之前一个星期紧张的天天拉肚子,真是没出息..不过养成了 ...
- web多站点跨域访问
有时项目app和m 需要公用一套接口 这个时候就要用到跨域:特别是app接口跨域访问站点时. 跨域配置: 1.iis服务器上需要安装URLwrite2.0 2.web.config 需要添加这个配置: ...
- 【规范】前端编码规范——jquery 规范
使用单引号 不推荐 $("div").html("<img src='1.jpg'>"); 推荐 $('div').html('<img sr ...
- tomcat 配置 使用综合
[参考]Tomcat 7.0安装与配置 [参考]tomcat 控制台日志(startup.bat)输出到指定文件中 [参考]将Java web应用部署到Tomcat 及部署到Tomcat根目录 的三种 ...
- QT中事件处理器和事件过滤器实现实例
Qt中事件处理的方式,最常用的就是使用事件处理器(event handler)和事件过滤器(event filter)这两种方法.接下来,我们就来看看事件处理器和事件过滤器是怎么使用的. 事件处理器 ...
- 【Zookeeper系列】ZooKeeper安装配置(转)
原文链接:https://www.cnblogs.com/sunddenly/p/4018459.html 一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪 ...