django基础入门(6)-模板
来源:互联网 发布:深圳网络指尖公司 编辑:程序博客网 时间:2024/05/18 22:54
如果我们的视图想给用户返回漂亮的页面,就需要在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文件.
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哪一行为配置模板的根目录,以后模板就会在这个目录下去搜索。配置模板搜索路径, 当获得模板时候从此目录下读取模板.
get_template()函数返回的Template对象,该类型对象有个render(context=None)函数,可用于对Template类型模板进行渲染(渲染是指使用context 数据对模板插值并返回生成的字符串).
修改我们news_app目录下的views.py模块中的index视图函数如下:
from django.shortcuts import renderfrom django.http import HttpResponsefrom django.template import loaderdef 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 renderdef 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基础入门(6)-模板
- Django入门:模板
- django基础3--模板
- django基础入门(1)django基本配置
- django基础入门(5)-视图
- 5.Django入门:教程-视图和模板
- Django入门-4:模板的基本使用
- django入门与学习-django的模板文件-2
- DJANGO基础学习之模板过滤备忘
- django基础入门(2)django中第一…
- 【Django基础入门】Breadcrumbs导航栏
- 【Django基础入门】生产环境搭建
- 【Django基础入门】空间数据库查询
- 【Django基础入门】Breadcrumbs导航栏
- Django学习(基础入门上篇)
- Django学习(基础入门下篇)
- django基础入门(1)-搭建环境
- django基础入门(3)-设计模型
- 记录下此时的心得体会
- word分隔符
- Java学习笔记之反射机制
- 1049数列的片段和(数学问题)
- 关于springMVC 接收date 类型为空时候的异常解决办法
- django基础入门(6)-模板
- Core Java Volume I 读书笔记---第十三章 集合
- Python入门记——下载Python
- 原始 socket 编程
- loadrunner Web_类函数之web_service_set_security()
- 习题二第4题
- 【LeetCode算法练习(C++)】Longest Common Prefix
- ORACLE_11g_Win64安装
- 记录thinkphp3.13移植到php7过程