django基础入门(6)-模板
2017-09-25 23:17
281 查看
如果我们的视图想给用户返回漂亮的页面,就需要在python代码中编写很多html css的代码。这会导致一些问题的出现, 例如:
1. 任何页面的改动会牵扯到Python代码的改动, 网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便;
2. 后台Python代码与设计HTML是不同的工作,页面设计人员应该编辑Python代码,他们应该与HTML打交道;
3. 程序员写后台程序同时页面设计人员写HTML模板会更高效,而不是一个人等待另一个人编辑同样的文件.
因此,使用Django的模板系统分离设计和Python代码会更干净更易维护.
作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入.
Django 项目可以配置一个或多个模板引擎。Django 的模板系统自带内建的后台 ——称为Django 模板语言(DTL),以及另外一种流行的Jinja2。
Django 模板语言 是Django 原生的模板系统。尽管它闭门造车,并且偏重某些方面,但是它仍然是一个优秀的模版库。如果没有特别紧急的理由选择另外一种后台,你应该使用DTL。Django 中包含模板的标准应用,例如django.contrib.admin,都使用DTL。
模板简言之:就是混合了模板语言的html文件.
打开project/settings.py文件,将templates目录配置到django中,相关内容如下:
参数解释:
backend: 使用何种模板引擎;
dirs: 定义了一个目录列表,模板引擎按照列表顺序在这些目录中查找模板文件;
app_dirs: 是否进入已安装应用中查找模板. 每种模板引擎都定义了一个默认的名称作为搜索模板的子目录. 例如django为它自己的模板引擎指定的是 ‘templates’ ,为jinja2指定的名字是‘jinja2’.
编写视图函数,django.template.loader 定义了get_template()函数以加载模板。get_template()函数使用给定的名称加载模板并返回一个Template对象.
get_template()函数返回的Template对象,该类型对象有个render(context=None)函数,可用于对Template类型模板进行渲染(渲染是指使用context 数据对模板插值并返回生成的字符串).
修改我们news_app目录下的views.py模块中的index视图函数如下:
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
def index(request):
# 从配置路径中加载模板
template = loader.get_template("app_news/index.html")
# 创建上下文(需要插入到模板中的数据)
context = {"title": "news title", "content": "news contents!"}
# 渲染模板
new_template = template.render(context)
return HttpResponse(new_template)
以上实现过于复杂,还有更简单方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr><td>新闻标题:</td><td>{{title}}</td></tr>
<tr><td>新闻内容:</td><td>{{content}}</td></tr>
</table>
</body>
</html>执行命令,python manage.py runserver启动测试服务器,在浏览器输入localhost:8000/index/,看到显示结果为:
1. 任何页面的改动会牵扯到Python代码的改动, 网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便;
2. 后台Python代码与设计HTML是不同的工作,页面设计人员应该编辑Python代码,他们应该与HTML打交道;
3. 程序员写后台程序同时页面设计人员写HTML模板会更高效,而不是一个人等待另一个人编辑同样的文件.
因此,使用Django的模板系统分离设计和Python代码会更干净更易维护.
作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入.
Django 项目可以配置一个或多个模板引擎。Django 的模板系统自带内建的后台 ——称为Django 模板语言(DTL),以及另外一种流行的Jinja2。
Django 模板语言 是Django 原生的模板系统。尽管它闭门造车,并且偏重某些方面,但是它仍然是一个优秀的模版库。如果没有特别紧急的理由选择另外一种后台,你应该使用DTL。Django 中包含模板的标准应用,例如django.contrib.admin,都使用DTL。
模板简言之:就是混合了模板语言的html文件.
1. 配置模板
如何让视图找到模板文件? 我们需要配置模板的路径,以便djangon模板引擎能够找到并加载模板文件.在和news_app同级目录下创建文件夹templates目录,用于存放模板文件。打开project/settings.py文件,将templates目录配置到django中,相关内容如下:
TEMPLATES = [ { 'BACKEND':'django.template.backends.django.DjangoTemplates', 'DIRS': [], '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', ], }, }, ]
参数解释:
backend: 使用何种模板引擎;
dirs: 定义了一个目录列表,模板引擎按照列表顺序在这些目录中查找模板文件;
app_dirs: 是否进入已安装应用中查找模板. 每种模板引擎都定义了一个默认的名称作为搜索模板的子目录. 例如django为它自己的模板引擎指定的是 ‘templates’ ,为jinja2指定的名字是‘jinja2’.
2. 使用模板
TEMPLATES = [ { 'BACKEND':'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, "templates")], '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哪一行为配置模板的根目录,以后模板就会在这个目录下去搜索。配置模板搜索路径, 当获得模板时候从此目录下读取模板.
编写视图函数,django.template.loader 定义了get_template()函数以加载模板。get_template()函数使用给定的名称加载模板并返回一个Template对象.
get_template()函数返回的Template对象,该类型对象有个render(context=None)函数,可用于对Template类型模板进行渲染(渲染是指使用context 数据对模板插值并返回生成的字符串).
修改我们news_app目录下的views.py模块中的index视图函数如下:
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
def index(request):
# 从配置路径中加载模板
template = loader.get_template("app_news/index.html")
# 创建上下文(需要插入到模板中的数据)
context = {"title": "news title", "content": "news contents!"}
# 渲染模板
new_template = template.render(context)
return HttpResponse(new_template)
以上实现过于复杂,还有更简单方式:
from django.shortcuts import render def index(request): context = {"title": "news title", "content": "news contents!"} return render(request, "app_news/index.html", context)在templates目录下创建app_news目录,在app_news目录中创建模板文件(html文件),index.html,内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table>
<tr><td>新闻标题:</td><td>{{title}}</td></tr>
<tr><td>新闻内容:</td><td>{{content}}</td></tr>
</table>
</body>
</html>执行命令,python manage.py runserver启动测试服务器,在浏览器输入localhost:8000/index/,看到显示结果为:
相关文章推荐
- django基础入门(3)django中模板
- Part 3:视图和模板--Django从入门到精通系列教程
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。
- Django入门-4:模板的基本使用
- 【Django基础入门】Ckeditor Wins7下图片上传及显示的路径问题
- django基础入门(4)-后台管理
- Django基础入门04
- DJANGO基础学习之模板过滤备忘
- django基础2--django利用模板生成网页
- Django基础入门之谈架构
- django基础入门(5)-视图
- 有时候,一点小问题,就会纠结你半天,真是基础不牢啊。 彻底解决 django的模板templates路径的问题; 一般会提示什么模板找不到,类似:TemplateDoesNotExist at /ac
- 【Django基础入门】Breadcrumbs导航栏
- 【Django基础入门】空间数据库查询
- Django学习(基础入门下篇)
- django入门与学习-模板的基本使用-4
- 字典树入门小结及基础模板详解(HDU1251 HDU1671)
- Python Django基础教程(一)(入门)
- django基础入门(2)-创建项目和应用
- Yii2基础笔记(一):Yii2默认模板入门使用