New Document
来源:互联网 发布:vs画图软件 编辑:程序博客网 时间:2024/05/02 02:28
在视图中使用模板
重新打开mysite.views.py中的current_datetime视图
from django.http import HttpResponseimport datetimedef current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
为了达到在视图中使用模板的目的,修改如下:
from django.http import HttpResponseimport datetimefrom django import templatedef current_datetime(request): t = template.Template('<html><body>It is {{time}}.'</body></html>) c = template.Context('time':datetim.datetime.now()) return HttpResponse(t.render(c))
但是这个代码依然没有解决模板嵌入在Python代码中的问题,没有实现数据与表现分离。
在解决这个问题之前,我们首先了解一下:模板加载和模板目录设置
模板加载和模板目录设置
首先我们做如下操作:打开配置文件setting.py(nano setting.py),然后写入下述代码
TEMPLATE_DIRS = ( '/home/django/mysite/templates',)
这里我们是将/home/django/mysite/templates
这个目录加到了setting.py的TEMPLATE_DIRS变量中,告诉django的模板加载机制在哪里可以找到模板。即使只有一个目录也不要忘了加逗号“,”。因为Python要求单元素元组中必须使用逗号,以示和圆括号的区别。
设置好了目录之后,我们将views.py代码修改为:
from django.template.loader import get_templatefrom django.template import Contextfrom django.http import HttpResponseimport datetimedef current_datetime(request): now = datetime.datetime.now() t = get_template('current_datetime.html') html = t.render(Context({'current_date': now})) return HttpResponse(html)
此范例中,我们使用了函数 django.template.loader.get_template()
,而不是手动从文件系统加载模板。该 get_template()
函数以模板名称为参数,在文件系统中找出模块的位置,打开文件并返回一个编译好的 Template 对象。
在模板目录中创建以下模板代码current_datetime.html文件:
<html><body>It is now {{current_time}}.</body></html>
在浏览器中刷新该页即可看到和之前一样的页面。
解决了模板嵌入在Python代码中的问题,我们并没有满足,现在我们来看一下位于 django.shortcuts
模块中名为 render_to_response()
的函数
render_ to _response()函数
先重新修改一下视图函数:
from django.shortcuts import render_to_responseimport datetimedef current_datetime(request): now = datetime.datetime.now() return render_to_response('current_datetime.html', {'current_date'})
刷新网页也可以看到和之前一样的页面。
太棒了!我们来研究一下发生了什么事情。
- 我们只导入了
render_to_response
和datetime
。 - 然后进行调用
datetime
返回一个时间给变量now。 - 最后调用
render_to_response()
函数,直接return了render_to_response()
函数返回的HttpResponse对象。
问:为什么没有模板加载、上下文创建、模板解析和 HttpResponse 创建?
答:模板加载、上下文创建、模板解析和 HttpResponse 创建工作均在对 render_to_response() 的调用中完成了。
render_to_response()
函数为我们提供了极大的便利,不再需要手动加载模板,创建 Context 和 HttpResponse 对象。
使用render_to_response()
函数的注意事项:
render_to_response()
函数的第一个参数必须是要使用的模板名称。如果要给定第二个参数,那么该参数必须是为该模板创建Context时使用的字典。如果不提供第二个参数,
render_to_response()
函数就直接使用一个空字典。
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- New Document
- If you modify the UNID of an existing document, it becomes a new document.
- document
- document
- Document
- document
- Document
- Document
- 我大一的线性代数学习
- 抽象代数——代数结构
- 2015.4.1 网络群体与市场 正关系与负关系
- 数据库事务隔离级别
- 2015.4.1 网络及其存在的环境
- New Document
- 2015.4.5 随机访问存储器
- 2015.4.8 物理和虚拟地址
- 2015.4.8 虚拟存储器
- Android-滑动冲突解决方案
- 2015.4.18 Bernstein条件
- 2015.7.4 过程抽象
- 2015.7.4 规格
- [论文阅读&翻译]Item-to-Item Collaborative Filtering