设为首页 加入收藏

TOP

django-模板初探(一)
2017-09-30 16:44:47 】 浏览:2546
Tags:django- 模板 初探

  一般而言,我们在视图函数中处理各种业务逻辑之后,应该返回一个 HttpResponse 对象。而 HttpResponse 对象的第一个参数接受字符串或者是迭代器,作为响应报文的主体。但是这意味着我们要将 HTML 内容写到 python 的代码中,或者写到一个文件中,然后用 python 打开,将可迭代的文件对象作为第一个参数。

  这样的后果是:

  1、代码很混乱,而且实际工作中前后端一般是由不同的程序员处理的,让可能不懂 python 的前端人员在 python 文件中书写 HTML 代码是一件很危险并且效率低下的事情。

  2、内容很难做到动态改变,这就失去的动态生成页面的优势了。

  为了解决以上的问题,django引入了模板层,当然这也是所有遵循MVC框架都有的。在1.8版本之前,django只支持内置的django模板引擎,简称为 DTL;在1.8以后,django还加入了对 jinja2 的支持,但是,如果你要使用jinja2模板引擎的话,还需要自己去下载jinja2的库( pip install Jinja2 ),因为django只提供了接口的支持。另外,如何你还有使用其他的第三方引擎,可能要进行 后端BACKEND)的自定义,因为django只提供了 DTL 和jinja2的后端支持。

  接下来来看看如何配置使用。

  模板的配置是通过 setting.py 中的 TEMPLATES 变量进行的,下面是通过 startproject 命令生成的项目中(1.9版本),在 setting 中的默认配置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

  首先,TEMPLATES 是一个列表,列表中的每个元素都是一个字典,每个字典代表一个模板引擎。上面的就是默认的配置,代表只使用 django 自带的 DTL 模板引擎,当然如果你有需要同时使用多个模板引擎的话,可以这样配置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            '/home/html/example.com',
            '/home/html/default',
        ],
    },
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [
            '/home/html/jinja2',
        ],
    },
]

  这样就可以根据需要使用不同的引擎了,一般通过函数的 using 参数来指定引擎的 NAME。关于这两个参数的含义下面会进行深入的解释。

  接下来看看要怎么配置:

  TEMPLATES:默认是一个空列表,列表中的每个元素都是字典,每个字典代表一个模板引擎的配置。一般我们使用 startproject 命令来生成项目时,这里都会自动填充为第一个例子所示的内容,当然因版本的不同会有差异。如果你不打算使用模板的话,也可以把里面的元素删掉,只留一个空列表。

  BACKEND:后端,是字典中的一个键,当然接下来的所有设置都位于字典中,下面就不一一说明强调了。没有默认值。这里应该是一个字符串,字符串的内容是可调用的 python 路径,也就是说如果在 python 中 import 的时候,应该能够找到。django支持的后端都位于 django.template.backends 目录下,例如:

  它们是模块中的一个类,这个类继承于 BaseEngine :

  更深层次的东西这里就不继续讨论了。

  NAME:模板引擎的别名,通常会在各种函数的 using 中用到。默认为定义后端(backends)的模块的名称,由上图可知,django的模板引擎的别名就是‘django’;jiaja2模板引擎的别名就是‘jinja2’。

  DIRS:搜索模板的路径顺序,模板引擎将按照里面的顺序来搜索模板文件。默认为空列表。注意:这里的路径应该是django可以访问的路径,因为我们的服务器一般运行在linux平台中,而linux平台对于权限的管理非常严格。一般我们的django的通过 wsgi 运行在 web 服务器后面时,如Apache、nginx等,服务器的权限是什么,django的权限就是什么。

    APP_DIRS:默认为False,但是 startproject 命令会为我们设置为 True。告诉模板引擎是否应该进入每个已安装的应用中查找模板。每种模板引擎后端都定义了一个固定的名称作为应用内存放模板的子目录的名称。例如,django的就叫做‘templates’ ;jinja2的就是‘jinja2’。

  OPTIONS:传递额外的参数给后端引擎,表示开启某些功能。可用的参数随着模板引擎的不同而不同。默认为一个空字典,当然 startproject 命令为我们填充了一些参数。

 下面是一些旧版本中的特性,在1.8之前,并不是所以的设置都在 TEMPLATES 变量中的,通常会分开设置:

TEMPLATE_CONTEXT_PROCESSORS:

默认:

["django.contrib.auth.context_processors.auth",
"django.template.context_processors.debug",
"django.template.context_processors.i18n",
"django.template.context_processors.media",
"django.template.context_processors.static",
"django.template.context_processors.tz",
"django.contrib.messages.context_processors.messages"]

 

  在1.8中是一个元祖,在1.9中是一个列表,不过里面的内容是一样的。在1.8版本中已经废弃了,现在应该在 OPTIONS 中,使用 'context_processors' 

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇virtualenvwrapper安装使用 下一篇Python Pandas 分析郁达夫《故都..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目