模板
作为Web框架,Django提供了模板,用于编写html代码,还可以嵌入模板代码更快更方便的完成页面开发,再通过在视图中渲染模板,将生成最终的html字符串返回给客户端浏览器。模版致力于表达外观,而不是程序逻辑。模板的设计实现了业务逻辑view与显示内容template的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。
模板包含两部分:
-
静态部分,包含html、css、js。
-
动态部分,就是模板语言。
Django模板语言,简写DTL,定义在django.template包中。 创建项目后,在"项目名称/settings.py"文件中定义了关于模板的配置。
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'tamplates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
DIRS定义一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板文件,通常是在项目的根目录下创建templates目录。
Django处理模板分为两个阶段:
-
1.加载:根据给定的路径找到模板文件,编译后放在内存中。
-
2.渲染:使用上下文数据对模板插值并返回生成的字符串。
为了减少开发人员重复编写加载、渲染的代码,Django提供了简写函数render,用于调用模板。
1、创建示例项目
1)创建项目demo4
。
2)进入项目目录demo4
,创建应用app1
。
3)在demo4/settings.py
中INSTALLED_APPS
项注册应用。
4)在demo4/settings.py
中DATABASES
项配置使用MySQL
数据库demo3
,数据库在昨天已经创建。
5)在demo4/__init__.py
中,导入pymysql
,并且调用install_as_MySQLdb()
方法
6)在demo4/settings.py
中TEMPLATES项配置模板查找路径。
7)创建模板目录。
8)打开demo4/urls.py
文件,包含app1
的url
配置。
9)在app1
目录下创建urls.py
,配置url
。
from django.conf.urls import url from .views import * urlpatterns=[ url(r'^$',index), ]
10)打开views.py
文件,定义视图index。
from django.shortcuts import render def index(request): return render(request,'app1/index.html')
11)在templates/app1
目录下创建文件index.html
,代码如下:
<html> <head> <title>首页</title> </head> <body> </body> </html>
12)打开app1/models.py
文件,定义模型类NewsInfo
,结构参照第二部分设计。
from django.db import models class NewsInfo(models.Model): news_title = models.CharField(max_length=20) news_content = models.TextField() news_date = models.DateField() isDelete = models.BooleanField(default=False)
13)生成迁移、执行迁移
14)设置管理界面本地化、打开demo4/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
LANGUAGE_CODE = 'zh-hans' #使用中国语言 TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
15、创建admin管理员,命令如下
python manage.py createsuperuser
16、admin.py中注册模型类,
from .models import * admin.site.register(NewsInfo)
16、启动服务器,登录admin后台,
17、添加几条初始数据
2、模板语言
模板语言包括4种类型,分别是:
-
变量
-
标签
-
过滤器
-
注释
接下来逐个介绍4种类型。
2.1、模板变量
模板变量的作用是计算并输出,变量名必须由字母、数字、下划线(不能以下划线开头)和点组成。
语法如下:
{ {变量}}
当模版引擎遇到点如dict.title,会按照下列顺序解析:
-
1.字典dict['title']
-
2.先属性后方法,将dict当作对象,查找属性title,如果没有再查找方法title()
-
3.如果是格式为dict.0则解析为列表dic[0]
如果变量不存在则插入空字符串''。
在模板中调用方法时不能传递参数。
示例
1)打开views.py文件,创建视图temp。
def temp(request): a = 'aaaa' b = {'b1':'b1111','b2':'b2222'} c = [1,2,3] news = NewsInfo() news.title = 'new的属性' return render(request,'app1/temp.html',locals())
2)打开booktest/urls.py文件,配置url。
url(r'^temp/$', views.temp),
3)修改在templates/app1下创建temp.html。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>temp</title> </head> <body> <h2> a变量:{ {a}}<br> 字典属性值b.b1:{ {b.b1}},<br> 列表对象的下标c.0的值:{ {c.0}}<br> 对象news的tltle属性:{ {news.title}}<br> </h2> </body> </html>