当前位置:K88软件开发文章中心网站服务器框架django → 文章内容

Django 模版高级进阶

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:19:19

_template()一样), 而 template_dirs 是一个可选的代替TEMPLATE_DIRS的搜索目录列表。如果加载器能够成功加载一个模板, 它应当返回一个元组: (template_source, template_path) 。在这里的template_source 就是将被模板引擎编译的的模板字符串,而 template_path 是被加载的模板的路径。 由于那个路径可能会出于调试目的显示给用户,因此它应当很快的指明模板从哪里加载。如果加载器加载模板失败,那么就会触发 django.template.TemplateDoesNotExist 异常。每个加载函数都应该有一个名为 is_usable 的函数属性。 这个属性是一个布尔值,用于告知模板引擎这个加载器是否在当前安装的Python中可用。 例如,如果 pkg_resources 模块没有安装的话,eggs加载器(它能够从python eggs中加载模板)就应该把 is_usable 设为 False ,因为必须通过 pkg_resources 才能从eggs中读取数据。一个例子可以清晰地阐明一切。 这儿是一个模板加载函数,它可以从ZIP文件中加载模板。 它使用了自定义的设置 TEMPLATE_ZIP_FILES 来取代了 TEMPLATE_DIRS 用作查找路径,并且它假设在此路径上的每一个文件都是包含模板的ZIP文件:from django.conf import settingsfrom django.template import TemplateDoesNotExistimport zipfiledef load_template_source(template_name, template_dirs=None): "Template loader that loads templates from a ZIP file." template_zipfiles = getattr(settings, "TEMPLATE_ZIP_FILES", []) # Try each ZIP file in TEMPLATE_ZIP_FILES. for fname in template_zipfiles: try: z = zipfile.ZipFile(fname) source = z.read(template_name) except (IOError, KeyError): continue z.close() # We found a template, so return the source. template_path = "%s:%s" % (fname, template_name) return (source, template_path) # If we reach here, the template couldn't be loaded raise TemplateDoesNotExist(template_name)# This loader is always usable (since zipfile is included with Python)load_template_source.is_usable = True我们要想使用它,还差最后一步,就是把它加入到 TEMPLATE_LOADERS 。 如果我们将这个代码放入一个叫mysite.zip_loader的包中,那么我们要把mysite.zip_loader.load_template_source加到TEMPLATE_LOADERS中。配置独立模式下的模板系统注意:这部分只针对于对在其他应用中使用模版系统作为输出组件感兴趣的人。 如果你是在Django应用中使用模版系统,请略过此部分。通常,Django会从它的默认配置文件和由 DJANGO_SETTINGS_MODULE 环境变量所指定的模块中加载它需要的所有配置信息。 (这点在第四章的”特殊的Python命令提示行”一节解释过。)但是当你想在非Django应用中使用模版系统的时候,采用环境变量并不方便,因为你可能更想同其余的应用一起配置你的模板系统,而不是处理配置文件并通过环境变量指向他们。为了解决这个问题,你需要使用附录D中所描述的手动配置选项。概括的说,你需要导入正确的模板中的片段,然后在你访问任一个模板函数之前,首先用你想指定的配置访问Django.conf.settings.configure()。你可能会考虑至少要设置 TEMPLATE_DIRS (如果你打算使用模板加载器), DEFAULT_CHARSET (尽管默认的utf-8 编码相当好用),以及 TEMPLATE_DEBUG 。所有可用的选项在附录D中都有详细描述,所有以 TEMPLATE_开头的选项都可能使你感兴趣。接下来做什么?延续本章的高级话题,下一章 会继续讨论Django模型的高级用法。

上一页  [1] [2] [3] [4] [5] [6] [7] 


Django 模版高级进阶