深入学习Django源码基础12 - 简要分析Django中template模块2
来源:互联网 发布:ubuntu默认字体 编辑:程序博客网 时间:2024/05/20 03:45
上一节模糊的分析了一下template的过程。
这节也模糊的分析一下关键字与过滤的过程。
在分析模版内容时候,构造语法问题树的过程初始化代码中有
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 parserbuiltins = []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.tagdef 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)@stringfilterdef capfirst(value): """Capitalizes the first character of the value.""" return value and value[0].upper() + value[1:]
通过2个装饰器注册1个过滤方法。
传递到函数的内容为安全的字符串。然后首字母大写返回。
在语法树解析和渲染过程中,通过tags和filters。注册的关键字解析。
比较感兴趣的是tag和filter使用。使得代码写起来很优雅。但是理解起来很麻烦。要好好学习。
- 深入学习Django源码基础12 - 简要分析Django中template模块2
- 深入学习Django源码基础11 - 简要分析Django中template模块1
- 深入学习Django源码基础14 - Django中forms简要分析
- 深入学习Django源码基础15 - views简要分析学习
- 深入学习Django源码基础10 - Django中http模块
- 深入学习Django源码基础16 - django中信号的学习分析
- 深入学习Django源码基础17 - django中messagee分析学习
- 深入学习Django源码基础9 - 简单分析DjangoORM部分
- 深入学习Django源码基础5 - utils中archive技巧
- 深入学习Django源码基础13 - Django中的中间件(middleware)
- 深入学习Django源码基础8 - Django中系统级国际化本地化
- 深入学习Django源码基础6 - utils中dateformat.py学习
- Django中template 使用
- django 模块 template(filter)
- 深入学习Django源码基础2 - python多态技巧-运行时判断函数
- django自动重新加载模块 源码分析
- Django基础学习<2>
- django(三)---Template(2)
- 使用perf生成Flame Graph(火焰图)
- 常见HTTP状态汇总
- 何谓 SMART rule?
- android.os.NetworkOnMainThreadException错误笔记
- 华为机试.约瑟夫环
- 深入学习Django源码基础12 - 简要分析Django中template模块2
- java获取的毫秒与c#获取的毫秒相关问题
- ARM+Android数据类型位数
- hdu4708Rotation Lock Puzzle
- ruby 读书笔记
- mysql rank
- android property system
- Mysql FROM_UNIXTIME()将时间戳转化为日期
- oracle锁定