Django框架下在视图中使用模版的方法
2015-07-16 11:56
846 查看
打开current_datetime 视图。 以下是其内容:
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
让我们用 Django 模板系统来修改该视图。 第一步,你可能已经想到了要做下面这样的修改:
from django.template import Template, Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() t = Template("<html><body>It is now {{ current_date }}.</body></html>") html = t.render(Context({'current_date': now})) return HttpResponse(html)
没错,它确实使用了模板系统,但是并没有解决我们在本章开头所指出的问题。 也就是说,模板仍然嵌入在Python代码里,并未真正的实现数据与表现的分离。 让我们将模板置于一个 单独的文件 中,并且让视图加载该文件来解决此问题。
你可能首先考虑把模板保存在文件系统的某个位置并用 Python 内建的文件操作函数来读取文件内容。 假设文件保存在 /home/djangouser/templates/mytemplate.html 中的话,代码就会像下面这样:
from django.template import Template, Context from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() # Simple way of using templates from the filesystem. # This is BAD because it doesn't account for missing files! fp = open('/home/djangouser/templates/mytemplate.html') t = Template(fp.read()) fp.close() html = t.render(Context({'current_date': now})) return HttpResponse(html)
然而,基于以下几个原因,该方法还算不上简洁:
- 它没有对文件丢失的情况做出处理。 如果文件 mytemplate.html 不存在或者不可读, open() 函数调用将会引发 IOError 异常。
- 这里对模板文件的位置进行了硬编码。 如果你在每个视图函数都用该技术,就要不断复制这些模板的位置。 更不用说还要带来大量的输入工作!
- 它包含了大量令人生厌的重复代码。 与其在每次加载模板时都调用 open() 、 fp.read() 和 fp.close() ,还不如做出更佳选择。
您可能感兴趣的文章:
相关文章推荐
- 动态生成SQL Server视图作业
- SQL server 视图(view)介绍
- dba_indexes视图的性能分析
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- SQL SERVER先判断视图是否存在然后再创建视图的语句
- sql server判断数据库、表、列、视图是否存在
- ASP.NET Web API教程 创建Admin视图详细介绍
- 浅谈javascript中自定义模版
- SQLite教程(三):数据表和视图简介
- oracle中的视图详解
- windows+apache+mod_python配置django运行环境
- python Django连接MySQL数据库做增删改查
- django自定义Field实现一个字段存储以逗号分隔的字符串
- 简介AngularJS的视图功能应用
- ASP.NET MVC中的视图生成实例分析
- 跟我学Laravel之视图 & Response
- Laravel 5框架学习之向视图传送数据
- 解析SQL Server 视图、数据库快照
- MySQL笔记之视图的使用详解
- 基于mysql事务、视图、存储过程、触发器的应用分析