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模版(一)相关推荐

  1. Django模版(三)

    Django模版(三) 文章目录 Django模版(三) 一.图片验证码 1.验证码 2.手动实现验证码 3.调用验证码 4.验证 5.点击"看不清,换一个",换一个新的验证码 二 ...

  2. Django模版(二)

    Django模版(二) 文章目录 Django模版(二) 一.模板继承 1.父模板 2.子模板 3.示例 二.HTML转义 1.示例 2.关闭转义 3.字符串字面值 三.CSRF 1.简介 2.示例 ...

  3. django 1.8 官方文档翻译:4-2-1 Django模版语言

    Django模版语言 本文将介绍Django模版系统的语法.如果您需要更多该系统如何工作的技术细节,以及希望扩展它,请浏览 The Django template language: for Pyth ...

  4. day80 django模版学习

    一.模版简介 DTL:django模版语言 核心: 变量 {{}} 标签 {% %} 二.模版语法之变量 变量渲染:{{变量}} 变量深度查询:{{变量.索引/key值/方法}} 三.模版之过滤器 变 ...

  5. django模版标签和继承

    模板标签 标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 这个定义是刻意模糊的. 例如,一个标签可以输出内容,作为控制结构,例如"if"语句或&q ...

  6. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)

    if 标签

  7. Django之路: 模版篇

    一.Django 模版  上章是介绍简单的把django.http.HttpResponse的内容显示到网页上,下面就介绍以下如何使用渲染模版的方法来显示内容.本节代码是基于Django 1.8,但 ...

  8. 5 JInja2模版(适用于Django和Flask)

    模版 在生产环节下,我们要把后端程序(其实就是python)计算出来的数据和html页面结合起来做,这个时候模版就派上大用处了. Flask下的模版---Jinja2 Jinja是日本寺庙的意思,并且 ...

  9. Flask与Django对比

    Flask与Django对比 Django vs Flask Flask 框架之间的差别 Django功能大而全,Flask只包含基本的配置 Django的一站式解决的思路,能让开发者不用在开发之前就 ...

最新文章

  1. 说说设计模式~建造者模式(Builder)
  2. linux中vi写java,Linux编辑器vi使用方法详细介绍
  3. python 加载与解析xml
  4. 10-异步爬虫(线程池/asyncio协程)实战案例
  5. ubuntu下终端提示符设置
  6. abstract类中可以有private的成员_C++|static成员与单例模式
  7. android 获取通讯录全选反选_Xamarin.Forms读取并展示Android和iOS通讯录 TerminalMACS客户端...
  8. 详解 | 求你别用效率低下的I/O了,要不试试这种I/O
  9. SAP License:SAP委外加工业务
  10. 使用java库中的对称加密算法
  11. java map clone,map.putall()和map.clone()方法有什么区别?
  12. 刻字机软件工具:::Easy Cut Studio
  13. Spring源码下载并导入Idea
  14. web大作业:基于html+css+javascript+jquery实现智能分控网站
  15. 内连接和外连接的区别
  16. 凯撒密码(移位密码)
  17. PDF动态生僻字文本处理
  18. 2019热门IT技术方向,你更中意哪个?
  19. c语言打砖块游戏说明,c语言打砖块游戏.doc
  20. 便利贴--14{GIF录制工具}

热门文章

  1. 应用指定显示到副屏_LED灯杆屏广泛应用逐渐成为智慧城市信息化的重要窗口
  2. C# 类、对象、方法和属性详解(重新排版,页面整洁)
  3. 通过制定编码规范的过程来说明《学会放弃、妥协也是个大进步,也是相当的提高工作效率》...
  4. DBCP针对不同数据库的validationQuery
  5. Kafka#4:存储设计 分布式设计 源码分析
  6. Android 自定义的开关按钮——SwitchButton
  7. mysql查询今天,昨天,近7天,近30天,本月,上一月数据
  8. Java 8 集合不完全一览
  9. 独立思考者模型:寻找潜藏在表象背后的真相 探寻真相的方法
  10. ios获得通讯录中联系人的所有属性