Python框架之Django学习笔记(六)

当前位置:首页>Python>Python框架>Python框架之Django学习笔记(六)

Python框架之Django学习笔记(六)

时间:2015-07-06 16:38来源:网络整理 作者:KKWL 点击:
模板 上篇博文学习了动态视图,但是,视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python 代码之中。 1 def current_datetime(request): 2 now = datetime.datetime.now() % now 4 retur

模板

  上篇博文学习了动态视图,但是,视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python 代码之中。

1 def current_datetime(request): 2 now = datetime.datetime.now() % now 4 return HttpResponse(html)

  尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意。 看一下为什么:

  • 对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。 站点设计的修改往往比底层 Python 代码的修改要频繁得多,因此如果可以在不进行 Python 代码修改的情况下变更设计,那将会方便得多。

  • Python 代码编写和 HTML 设计是两项不同的工作,大多数专业的网站开发环境都将他们分配给不同的人员(甚至不同部门)来完成。 设计者和HTML/CSS的编码人员不应该被要求去编辑Python的代码来完成他们的工作。

  • 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,远胜于让一个人等待另一个人完成对某个既包含 Python又包含 HTML 的文件的编辑工作。 

  •   基于这些原因,将页面的设计和Python的代码分离开会更干净简洁更容易维护。 我们可以使用 Django的 模板系统 (Template System)来实现这种模式,这也是Python的MVC又被称为MVT的原因。T=Template。

      

      首先,了解一下模板系统是如何独立工作的:

      在Python代码中使用Django模板的最基本方式如下:

      1.可以用原始的模板代码字符串创建一个 Template 对象, Django同样支持用指定模板文件路径的方式来创建 Template 对象;

      2.调用模板对象的render方法,并且传入一套变量context。它将返回一个基于模板的展现字符串,模板中的变量和标签会被context值替换。

      先在命令行下进入到一个工程目录下,然后执行如下命令: 

    1 python manage.py shell

     

      然后在交互式解释器中执行代码:

    >>> from django import template >>> t = template.Template() >>> c = template.Context({: }) >>> print t.render(c) My name is Adrian. >>> c = template.Context({: }) >>> print t.render(c) My name is Fred.

     PS:

      如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python。这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用哪个设置文件。 Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪个配置文件,这些系统将不能工作。

      如果你想知道,这里将向你解释它背后是如何工作的。 Django搜索DJANGO_SETTINGS_MODULE环境变量,它被设置在settings.py中。例如,假设mysite在你的 Python搜索路径中,那么DJANGO_SETTINGS_MODULE应该被设置为:’mysite.settings’

      当你运行命令:python manage.py shell,它将自动帮你处理DJANGO_SETTINGS_MODULE。 在当前的这些示例中,我们鼓励你使用`` python manage.py shell``这个方法,这样可以免去你大费周章地去配置那些你不熟悉的环境变量。

      随着你越来越熟悉Django,你可能会偏向于废弃使用`` manage.py shell`` ,而是在你的配置文件.bash_profile中手动添加 DJANGO_SETTINGS_MODULE这个环境变量。

      当你创建一个 Template 对象,模板系统在内部编译这个模板到内部格式,并做优化,做好 渲染的准备。 如果你的模板语法有错误,那么在调用 Template() 时就会抛出 TemplateSyntaxError 异常:

    >>> from django.template import Template >>> t = Template() Traceback (most recent call last): File , line 1, in ? ... django.template.TemplateSyntaxError: Invalid block tag:

     

      这里,块标签(block tag)指向的是`` {% notatag %}``,块标签与模板标签是同义的。

      系统会在下面的情形抛出 TemplateSyntaxError 异常:

      模板渲染

      一旦创建一个 Template 对象,可以用 context 来传递数据给它。 一个context是一系列变量和它们值的集合。

    ------分隔线----------------------------