首页 > 其他 > 详细

django学习系列之模板系统篇(二)

时间:2014-02-13 05:49:18      阅读:276      评论:0      收藏:0      [点我收藏+]

这篇文章讲怎么在视图中使用模板。只会说没用,用起来才是真的。

这里必须提到一个新概念了:模板目录。在模板目录里面,你存放了一堆模板文件。

怎么让系统找到模板目录呢?靠设置文件。

在项目中找到settings.py文件,找到TEMPLATE_DIRS,在这一项里面添加你的模板目录位置。

Linux系统下有两种添加方法:

1.使用绝对路径。比如:

TEMPLATE_DIRS = (

‘/home/django/mysite/templates‘, #结尾要有逗号

)

2.使用内部变量__file__,改变量被自动设置为代码所在的python模块文件名。比如:

TEMPLATE_DIRS = (

os.path.join(os.path.dirname(__file__),‘templates‘).replace(‘ \\‘,‘/‘),

)

settings.py所在目录下查找templates目录。


具体使用

先看一个例子。

fromdjango.template.loader import get_template

fromdjango.template import Context

from django.httpimport HttpResponse

import datetime


defcurrent_datetime(request):

now =datetime.datetime.now()

t =get_template(‘current_datetime.html‘)

html =t.render(Context({‘current_date‘: now}))

returnHttpResponse(html)

前面也用过这个例子,不解释了。这是一种用法,使用HttpResponse()方法。

但是应答http请求的操作太常用了,django提供了一个快捷的方法,位于django.shortcuts模块中名为render_to_response()的方法。

使用render_to_response()方法,上面的代码可以简化为:

from django.httpimport render_to_response

import datetime


defcurrent_datetime(request):

now =datetime.datetime.now()

returnrender_to_response(‘current_datetime.html‘, {‘current_date‘: now})

render_to_response()的第一个参数必须是要使用的模板名称。如果要给定第二个参数,那么该参数必须是为该模板创建Context 时所使用的字典。如果不提供第二个参数,render_to_response()使用一个空字典。


写过web的人都知道html文档的内容实在多,要是能够重用,那就太好了。

重用的第一种方法是使用{%include %}标签,第二种方法就是模板继承

下面重点将第二种方法,第一种方法参考标签的用法。

模板继承,从本质上来说就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。跟类继承的概念差不多。


直接上示例:

假设一个文件base.html

<!DOCTYPEHTML>

<htmllang="en">

<head>

<title>{%block title %}{% endblock %}</title>

</head>

<body>

<h1>Myhelpful timestamp site</h1>

{% blockcontent %}{% endblock %}

{% blockfooter %}

<hr>

<p>Thanksfor visiting my site.</p>

{% endblock%}

</body>

</html>

我们使用了一个新的标签:{%block %},它告诉模板引擎,子模板可以重载这些部分。

继承会用到一个{%extend %}标签,继承后的文件current_datetime.html,请看:

{% extends"base.html" %}


{% block title%}The current time{% endblock %}

{% block content%}


<p>It isnow {{ current_date }}.</p>

{% endblock %}


工作方式:在加载current_datetime.html模板时,模板引擎发现了{%extend %}标签,意识到该模板是一个子模板,所以立即装载其父模板,即本例中的base.html

此时,模板引擎注意到base.html中的三个{%block %}标签,并用子模板的内容替换这些block 。因此,引擎将会使用我们在{% block title %} 中定义的标题,对{% block content %} 也一样。

注意由于子模板并没有定义footer 块,模板系统将使用在父模板中定义的值。


django学习系列之模板系统篇(二)

原文:http://blog.csdn.net/whoami021/article/details/19130803

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!