1.模板
模板是一个文本,用于分离文档的表现形式和内容。 模板定义了占位符以及各种用于规范文档该如何显示的各部分基本逻辑(模板标签)。 模板通常用于产生HTML,但是Django的模板也能产生任何基于文本格式的文
档。
在Python代码中使用Django模板的最基本方式如下:
- 可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创
建 Template 对象; - 调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中
的变量和标签会被context值替换。
下面给出一个简单的代码:原书中代码执行前要配置DJANGO_SETTINGS_MODULE,如果不配置,则需要添加如下代码
>>> from django import template # 额外添加的代码 >>> from django.conf import settings >>> settings.configure() >>> t = template.Template(‘My name is {{name}}‘) >>> c = template.Context({‘name‘: ‘thystar‘}) >>> print t.render(c) My name is thystar >>>
一旦你创建一个 Template 对象,可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。
t.render(c)返回的值是一个Unicode对象,不是普通的Python字符串。 在框架中,Django会一直使用Unicode对象而不是普通的字符串。
2. 在视图中使用模板
在mysite.views中创建的 current_datetime 视图
from django.template import Template, Context from django.http import HttpResponse import datetime def current_datetime(req): 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)
在
/home/djangouser/templates/
下创建current_datetime.html文件:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> It is now {{ current_data }} </body> </html>
在urls.py的urlpatterns中写如下代码:
url(r‘^current_datetime/$‘, current_datetime),
3. 模板加载
为了减少模板加载调用过程及模板本身的冗余代码,Django 提供了一种使用方便且功能强大的 API ,用于从磁盘中加载模板。
在settings.py配置文件中找到TEMPLATE_DIRS,它的默认设置是一个空元组(tuple),添加:
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don‘t forget to use absolute paths, not relative paths. os.path.join(os.path.split(os.path.dirname(__file__))[0], ‘templates‘), )
4. render_to_response()使用
from django.shortcuts import render_to_response import datetime def current_datetime(request): now = datetime.datetime.now() return render_to_response(‘current_datetime.html‘, {‘current_date‘: now})
笔记来自《Django中文教程》
时间: 2024-10-31 04:08:20