深入学习Django源码基础12 - 简要分析Django中template模块2
2013-09-10 11:48
906 查看
上一节模糊的分析了一下template的过程。
这节也模糊的分析一下关键字与过滤的过程。
在分析模版内容时候,构造语法问题树的过程初始化代码中有
因此是buildtins中内容为 template.defaulttags.reigster和template.defaultfilters.register
register = Library()
Library在base中定义。其中包含tags与filters。
分析tags中使用
通过装饰器定义1个comment关键字。关键字对应语法树中的节点为
分析filters中使用
通过2个装饰器注册1个过滤方法。
传递到函数的内容为安全的字符串。然后首字母大写返回。
在语法树解析和渲染过程中,通过tags和filters。注册的关键字解析。
比较感兴趣的是tag和filter使用。使得代码写起来很优雅。但是理解起来很麻烦。要好好学习。
这节也模糊的分析一下关键字与过滤的过程。
在分析模版内容时候,构造语法问题树的过程初始化代码中有
def add_library(self, lib): self.tags.update(lib.tags) self.filters.update(lib.filters)
# global list of libraries to load by default for a new parser builtins = [] for lib in builtins: self.add_library(lib) 加载全局lib。 在base.py文件底部有 def import_library(taglib_module): try: mod = import_module(taglib_module) except ImportError as e: if is_library_missing(taglib_module): return None else: raise InvalidTemplateLibrary("ImportError raised loading %s: %s" % (taglib_module, e)) try: return mod.register except AttributeError: raise InvalidTemplateLibrary("Template library %s does not have " "a variable named 'register'" % taglib_module) def add_to_builtins(module): builtins.append(import_library(module)) add_to_builtins('django.template.defaulttags') add_to_builtins('django.template.defaultfilters')
因此是buildtins中内容为 template.defaulttags.reigster和template.defaultfilters.register
register = Library()
Library在base中定义。其中包含tags与filters。
分析tags中使用
@register.tag def comment(parser, token): """ Ignores everything between ``{% comment %}`` and ``{% endcomment %}``. """ parser.skip_past('endcomment') return CommentNode()
通过装饰器定义1个comment关键字。关键字对应语法树中的节点为
class CommentNode(Node): def render(self, context): return ''
分析filters中使用
@register.filter(is_safe=True) @stringfilter def capfirst(value): """Capitalizes the first character of the value.""" return value and value[0].upper() + value[1:]
通过2个装饰器注册1个过滤方法。
传递到函数的内容为安全的字符串。然后首字母大写返回。
在语法树解析和渲染过程中,通过tags和filters。注册的关键字解析。
比较感兴趣的是tag和filter使用。使得代码写起来很优雅。但是理解起来很麻烦。要好好学习。
相关文章推荐
- 深入学习Django源码基础11 - 简要分析Django中template模块1
- 深入学习Django源码基础15 - views简要分析学习
- 深入学习Django源码基础14 - Django中forms简要分析
- 深入学习Django源码基础17 - django中messagee分析学习
- 深入学习Django源码基础16 - django中信号的学习分析
- 深入学习Django源码基础9 - 简单分析DjangoORM部分
- 深入学习Django源码基础7 - python的gettext国际化本地化
- 深入学习Django源码基础3 - python提供的对象默认方法
- 深入学习Django源码基础6 - utils中dateformat.py学习
- 深入学习Django源码基础8 - Django中系统级国际化本地化
- 深入学习Django源码基础10 - Django中http模块
- 深入学习Django源码基础13 - Django中的中间件(middleware)
- 深入学习Django源码基础2 - python多态技巧-运行时判断函数
- 深入学习Django源码基础5 - utils中archive技巧
- 深入学习Django源码基础1 - 深刻理解Python中的元类(metaclass)
- 深入学习Django源码基础4 - python的动态延时加载技术(lazy)
- Linux设备驱动之Input子系统学习日记--笔者将分享学习一个全新的框架的方法并结合源码深入分析input子系统
- 基于 Django1.10 文档的深入学习(34)—— Customizing authentication in Django 之 基础
- 分析.NET基础库源码,学习Stream类及相关类
- SpringMVC框架原理学习-各模块源码分析