Django模版(一)
Django模版(一)
文章目录
- Django模版(一)
- 一、模版
- 1.简介
- 2.模板包含两部分:
- 3.模板文件的使用
- 4.Django处理模板分为两个阶段:
- 5.模板文件加载顺序
- 6.创建示例项目
- 二、模板语言
- 1.模板变量
- 2.标签
- 3.过滤器
- 4.自定义过滤器
- 5.注释
一、模版
1.简介
作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器。
- 模版致力于表达外观,而不是程序逻辑。
模板的设计实现了业务逻辑view与显示内容template的分离
,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。
2.模板包含两部分:
- 静态部分,包含html、css、js。
- 动态部分,用于动态去产生一些网页内容。通过模板语言来产生
Django模板语言,简写DTL,定义在django.template包中。 创建项目后,在"项目名称/settings.py"文件中定义了关于模板的配置。
DIRS定义一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板文件,通常是在项目的根目录下创建templates目录。
3.模板文件的使用
通常是在视图函数中使用模板产生html内容返回给客户端。
a)加载模板文件 loader.get_template
获取模板文件的内容,产生一个模板对象。
b)定义模板上下文 RequeseContext
给模板文件传递数据。
c)模板渲染产生html页面内容 render
用传递的数据替换相应的变量,产生一个替换后的标准的html内容。
4.Django处理模板分为两个阶段:
- 1.加载:根据给定的路径找到模板文件,编译后放在内存中。
- 2.渲染:使用上下文数据对模板插值并返回生成的字符串。
为了减少开发人员重复编写加载、渲染的代码,Django提供了简写函数render,用于调用模板
。
5.模板文件加载顺序
- 1)首先去配置的模板目录下面去找模板文件。
在去INSTALLED_APPS下面的每个应用的templates去找模板文件,前提是应用中必须有templates文件夹
。
6.创建示例项目
1)创建项目test4。
django-admin startproject test4
2)进入项目目录test4,创建应用booktest。
cd test4
python manage.py startapp booktest
3)在test4/settings.py中INSTALLED_APPS项安装应用。
4)在test4/settings.py中DATABASES项配置使用MySQL数据库test2,数据库在第二部分已经创建。
5)在test4/settings.py中TEMPLATES项配置模板查找路径
6)创建模板目录结构如下
7)打开test4/urls.py文件,包含booktest的url配置。
8)在booktest/目录下创建urls.py,配置url。
from django.conf.urls import url
from booktest import views
urlpatterns=[url(r'^$',views.index),
]
9)打开booktest/views.py文件,定义视图index。
from django.shortcuts import renderdef index(request):return render(request,'booktest/index.html')
10)在templates/booktest目录下创建文件index.html,代码如下:
<html>
<head><title>首页</title>
</head>
<body></body>
</html>
11)打开booktest/models.py文件,定义模型类BookInfo,结构参照第二部分设计。
from django.db import modelsclass BookInfo(models.Model):btitle = models.CharField(max_length=20)bpub_date = models.DateField()bread = models.IntegerField(default=0)bcommet = models.IntegerField(default=0)isDelete = models.BooleanField(default=False)
二、模板语言
模板语言包括4种类型,分别是:
变量
标签
过滤器
注释
1.模板变量
模板变量的作用是计算并输出,变量名必须由字母、数字、下划线(不能以下划线开头)和点组成
。
语法如下:
{{变量}}
当模版引擎遇到点如book.title,会按照下列顺序解析
:
例如:{{ book.btitle }}
- 1)首先把book当成一个字典,把btitle当成键名,进行取值book[‘btitle’]
- 2)把book当成一个对象,把btitle当成属性,进行取值book.btitle
- 3)把book当成一个对象,把btitle当成对象的方法,进行取值book.btitle
例如:{{book.0}}
- 1)首先把book当成一个字典,把0当成键名,进行取值book[0]
- 2)把book当成一个列表,把0当成下标,进行取值book[0]
如果解析失败,则产生内容时用空字符串填充模板变量
。
使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。
如果变量不存在则插入空字符串
‘’。
在模板中调用方法时不能传递参数
。
示例
1)打开booktest/views.py文件,创建视图temp_var。
def temp_var(request):dict={'title':'字典键值'}book=BookInfo()book.btitle='对象属性'context={'dict':dict,'book':book}return render(request,'booktest/temp_var.html',context)
2)打开booktest/urls.py文件,配置url。
url(r'^temp_var/$', views.temp_var),
3)修改在templates/booktest下创建temp_var.html。
<html>
<head><title>模板变量</title>
</head>
<body>
模板变量:<br/>
{{dict.title}}<br/>
{{book.btitle}}<br/>
</body>
</html>
4)运行服务器,在浏览器中输入如下网址。
http://127.0.0.1:8000/temp_var/
5)浏览效果如下图
2.标签
语法如下:
{%代码段%}
for标签语法如下:
{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环,从1开始
{%empty%}
列表为空或不存在时执行此逻辑
{%endfor%}
if标签语法如下:
{%if ...%}
逻辑1
{%elif ...%}
逻辑2
{%else%}
逻辑3
{%endif%}
比较运算符如下:
注意:运算符
左右两侧不能紧挨变量或常量,必须有空格。
==
!=
<
>
<=
>=
布尔运算符如下:
and
or
not
示例
1)打开booktest/views.py文件,创建视图temp_tag。
from booktest.models import BookInfo
def temp_tags(request):context={'list':BookInfo.objects.all()}return render(request,'booktest/temp_tag.html',context)
2)打开booktest/urls.py文件,配置url。
url(r'^temp_tag/$', views.temp_tags),
3)在templates/booktest下创建temp_tag.html。
<html>
<head><title>标签</title>
</head>
<body>
图书列表如下:
<ul>{%for book in list%}{%if book.id <= 2%}<li style="background-color: red;">{{book.btitle}}</li>{%elif book.id <= 3%}<li style="background-color: blue;">{{book.btitle}}</li>{%else%}<li style="background-color: green;">{{book.btitle}}</li>{%endif%}{%empty%}<li>对不起,没有图书</li>{%endfor%}
</ul>
</body>
</html>
4)运行服务器,在浏览器中输入如下网址。
http://127.0.0.1:8000/temp_tag/
浏览效果如下图:
3.过滤器
语法如下:
- 使
用管道符号|来应用过滤器
,用于进行计算、转换操作,可以使用在变量、标签中。 如果过滤器需要参数,则使用冒号:传递参数。
变量|过滤器:参数
- 长度length,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
默认值default,如果变量不存在时则返回默认值。
data|default:'默认值'
日期date,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:
Y表示年,格式为4位,
y表示两位的年。
m表示月,格式为01,02,12等。
d表示日, 格式为01,02等。
j表示日,格式为1,2等。
H表示时,24进制,
h表示12进制的时。
i表示分,为0-59。
s表示秒,为0-59。
value|date:“Y年m月j日
H时i分s秒”
示例
1)打开booktest/views.py文件,创建视图temp_filter。
def temp_filter(request):context={'list':BookInfo.objects.all()}return render(request,'booktest/temp_filter.html',context)
2)打开booktest/urls.py文件,配置url。
url(r'^temp_filter/$', views.temp_filter),
3)在templates/booktest下创建temp_filter.html。
<head><title>过滤器</title>
</head>
<body>
图书列表如下:
<ul>{%for book in list%}{%if book.btitle|length > 4%}<li style="background-color: red;">{{book.btitle}}---默认时间格式为:{{book.bpub_date}}</li>{%else%}<li style="background-color: green;">{{book.btitle}}---格式化时间为:{{book.bpub_date|date:"Y-m-j"}}</li>{%endif%}{%endfor%}
</ul>
</body>
</html>
4)运行服务器,在浏览器中输入如下网址。
http://127.0.0.1:8000/temp_filter/
浏览效果如下图:
4.自定义过滤器
自定义的过滤器函数,至少有一个参数,最多两个
过滤器就是python中的函数,注册后就可以在模板中当作过滤器使用,下面以求余为例开发一个自定义过滤器mod。
示例
1)在应用中创建templatetags目录,当前示例为"booktest/templatetags",创建_init_文件,内容为空
。
2)在"booktest/templatetags"目录下创建filters.py文件,代码如下:
#导入Library类
from django.template import Library#创建一个Library类对象
register=Library()#使用装饰器进行注册
@register.filter
#定义求余函数mod,将value对2求余
def mod(value):return value%2 == 0
3)在templates/booktest/temp_filter.html中,使用自定义过滤器。
- 首先使用load标签引入模块。
{%load filters%}
- 在遍历时根据编号判断奇偶,代码改为如下:
4)运行服务器,浏览效果如下:
过滤器可以接收参数,将booktest/templatetags/filters.py中增加mod_num函数。
#使用装饰器进行注册
@register.filter
#定义求余函数mod_num,将value对num求余
def mod_num(value,num):return value%num
5)在templates/booktest/temp_filter.html中修改遍历时判断代码。
6)运行服务器,浏览效果如下:
5.注释
在模板中使用如下模板注释,这段代码不会被编译,不会输出到客户端;html注释只能注释html内容,不能注释模板语言
。
- 1)单行注释语法如下:
{#...#}
注释可以包含任何模版代码,有效的或者无效的都可以。
{# { % if foo % }bar{ % else % } #}
- 2)多行注释使用comment标签,语法如下:
{%comment%}
...
{%endcomment%}
Django模版(一)相关推荐
- Django模版(三)
Django模版(三) 文章目录 Django模版(三) 一.图片验证码 1.验证码 2.手动实现验证码 3.调用验证码 4.验证 5.点击"看不清,换一个",换一个新的验证码 二 ...
- Django模版(二)
Django模版(二) 文章目录 Django模版(二) 一.模板继承 1.父模板 2.子模板 3.示例 二.HTML转义 1.示例 2.关闭转义 3.字符串字面值 三.CSRF 1.简介 2.示例 ...
- django 1.8 官方文档翻译:4-2-1 Django模版语言
Django模版语言 本文将介绍Django模版系统的语法.如果您需要更多该系统如何工作的技术细节,以及希望扩展它,请浏览 The Django template language: for Pyth ...
- day80 django模版学习
一.模版简介 DTL:django模版语言 核心: 变量 {{}} 标签 {% %} 二.模版语法之变量 变量渲染:{{变量}} 变量深度查询:{{变量.索引/key值/方法}} 三.模版之过滤器 变 ...
- django模版标签和继承
模板标签 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结构,例如"if"语句或&q ...
- 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)
if 标签
- Django之路: 模版篇
一.Django 模版 上章是介绍简单的把django.http.HttpResponse的内容显示到网页上,下面就介绍以下如何使用渲染模版的方法来显示内容.本节代码是基于Django 1.8,但 ...
- 5 JInja2模版(适用于Django和Flask)
模版 在生产环节下,我们要把后端程序(其实就是python)计算出来的数据和html页面结合起来做,这个时候模版就派上大用处了. Flask下的模版---Jinja2 Jinja是日本寺庙的意思,并且 ...
- Flask与Django对比
Flask与Django对比 Django vs Flask Flask 框架之间的差别 Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就 ...
最新文章
- 说说设计模式~建造者模式(Builder)
- linux中vi写java,Linux编辑器vi使用方法详细介绍
- python 加载与解析xml
- 10-异步爬虫(线程池/asyncio协程)实战案例
- ubuntu下终端提示符设置
- abstract类中可以有private的成员_C++|static成员与单例模式
- android 获取通讯录全选反选_Xamarin.Forms读取并展示Android和iOS通讯录 TerminalMACS客户端...
- 详解 | 求你别用效率低下的I/O了,要不试试这种I/O
- SAP License:SAP委外加工业务
- 使用java库中的对称加密算法
- java map clone,map.putall()和map.clone()方法有什么区别?
- 刻字机软件工具:::Easy Cut Studio
- Spring源码下载并导入Idea
- web大作业:基于html+css+javascript+jquery实现智能分控网站
- 内连接和外连接的区别
- 凯撒密码(移位密码)
- PDF动态生僻字文本处理
- 2019热门IT技术方向,你更中意哪个?
- c语言打砖块游戏说明,c语言打砖块游戏.doc
- 便利贴--14{GIF录制工具}
热门文章
- 应用指定显示到副屏_LED灯杆屏广泛应用逐渐成为智慧城市信息化的重要窗口
- C# 类、对象、方法和属性详解(重新排版,页面整洁)
- 通过制定编码规范的过程来说明《学会放弃、妥协也是个大进步,也是相当的提高工作效率》...
- DBCP针对不同数据库的validationQuery
- Kafka#4:存储设计 分布式设计 源码分析
- Android 自定义的开关按钮——SwitchButton
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据
- Java 8 集合不完全一览
- 独立思考者模型:寻找潜藏在表象背后的真相 探寻真相的方法
- ios获得通讯录中联系人的所有属性