常用语法

符号

{{...}} # 变量相关
{%...%} # 逻辑相关
{#...#} # 注释

使用变量

 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)-模版的更多相关文章

  1. python框架之django

    python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django temple django models ...

  2. 第六篇:web之python框架之django

    python框架之django   python框架之django 本节内容 web框架 mvc和mtv模式 django流程和命令 django URL django views django te ...

  3. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

  4. Python框架之Django的相册组件

    Python框架之Django的相册组件 恩,没错,又是Django,虽然学习笔记已经结贴,但是学习笔记里都是基础的,Django的东西不管怎么说还是很多的,要学习的东西自然不会仅仅用十几篇博文就能学 ...

  5. Python框架之Django学习笔记(十一)

    话说上次说到数据库的基本访问,而数据库我们主要进行的操作就是CRUD,也即是做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete),俗 ...

  6. Python高级进阶(二)Python框架之Django写图书管理系统(LMS)

    正式写项目准备前的工作 Django是一个Web框架,我们使用它就是因为它能够把前后端解耦合而且能够与数据库建立ORM,这样,一个Python开发工程师只需要干自己开发的事情就可以了,而在使用之前就我 ...

  7. Python框架之Django学习笔记(十二)

    Django站点管理 十一转眼结束,说好的充电没能顺利开展,反而悠闲的看了电视剧以及去影院看了新上映的<心花路放>.<亲爱的>以及<黄金时代>,说好的劳逸结合现在回 ...

  8. Python框架之Django学习笔记(十)

    又是一周周末,如约学习Django框架.在上一次,介绍了MVC开发模式以及Django自己的MVT开发模式,此次,就从数据处理层Model谈起. 数据库配置 首先,我们需要做些初始配置:我们需要告诉D ...

  9. Python框架之Django学习笔记(九)

    模型 之前,我们用 Django 建造网站的基本途径: 建立视图和 URLConf . 正如我们所阐述的,视图负责处理一些主观逻辑,然后返回响应结果. 作为例子之一,我们的主观逻辑是要计算当前的日期和 ...

随机推荐

  1. “The subscription does not exist” when a distributor primary replica fails over to a replica that does not use the same agent profile

    Symptoms Consider the following scenario: In Microsoft SQL Server 2017, you have a distribution agen ...

  2. Atitit 3种类型的公司:运营驱动型;产品驱动型; 技术驱动型。

    Atitit  3种类型的公司:运营驱动型:产品驱动型: 技术驱动型. 领导驱动,产品驱动,运营驱动还是工程师驱动 3种类型的公司: 一种是运营驱动型: 一种是产品驱动型: 一种技术驱动型. 运营驱动 ...

  3. ffmpeg中AVBuffer的实现分析

    [时间:2017-10] [状态:Open] [关键词:ffmpeg,avutil,avbuffer, 引用计数] 0 引言 AVBuffer是ffmpeg提供的基于引用计数的智能指针的一个实现版本. ...

  4. virtualbox安装android6.0并设置分辨率为1920x1080x32

    下载安装:https://www.cnblogs.com/wynn0123/p/6288344.html 这里我做的是下载android6.0-64bit,然后文件系统只支持ext4 安装完成之后我的 ...

  5. maven添加jetty插件,同时运行多个实例

    <plugins> <!-- jetty插件 --> <plugin> <groupId>org.eclipse.jetty</groupId&g ...

  6. Hadoop 2.2.0安装和配置lzo

    转自:http://www.iteblog.com/archives/992 Hadoop经常用于处理大量的数据,如果期间的输出数据.中间数据能压缩存储,对系统的I/O性能会有提升.综合考虑压缩.解压 ...

  7. thinkphp3.2在nginx下的配置

    最近一直没用nginx 昨天将tp3.2的项目部署到Ubuntu下的nginx下,发现忘记怎么配置的了 特将配置方式记录下来,以方便日后查找 服务器nignx 配置文件 server { listen ...

  8. CentOS安装和配置FTP

    1.安装vsftpd #安装vsftpd yum install -y vsftpd #设置开机启动 systemctl enable vsftpd.service # 重启 service vsft ...

  9. 20模板方法模式TemplateMethod

    一.什么是模板方法模式 Template Method模式也叫模板方法模式,是 行为模式之一,它把具有特定步骤算法中的某些 必要的处理委让给抽象方法,通过子类继承对抽 象方法的不同实现改变整个算法的行 ...

  10. SQL 四大功能DDL/DML/DCL/TCL

    SQL主要分成四部分:(1)数据定义.(SQL DDL)用于定义SQL模式.基本表.视图和索引的创建和撤消操作.(2)数据操纵.(SQL DML)数据操纵分成数据查询和数据更新两类.数据更新又分成插入 ...