Django里面的自定义tag和filter

Django的文档里面有这么一句


The app that contains the custom tags must be in INSTALLED_APPS 
in order for the {% load %} tag to work. 


当第一次load一个template的时候,调用源码

def get_templatetags_modules():
    """
    Return the list of all available template tag modules.

    Caches the result for faster access.
    """
    global templatetags_modules
    if not templatetags_modules:
        _templatetags_modules = []
        # Populate list once per process. Mutate the local list first, and
        # then assign it to the global name to ensure there are no cases where
        # two threads try to populate it simultaneously.
        for app_module in ['django'] + list(settings.INSTALLED_APPS):
            try:
                templatetag_module = '%s.templatetags' % app_module
                import_module(templatetag_module)
                _templatetags_modules.append(templatetag_module)
            except ImportError:
                continue
        templatetags_modules = _templatetags_modules
    return templatetags_modules


Load类型的Node 输出的定义

class LoadNode(Node):
    def render(self, context):
        return ''

可见他是一个空白字符串,也就是在输出的html中"抹掉"了


example

<html>
<head>
	{% load blog_extras %}
	Hi my double value is <b>{{myvalue|mycut}}</b>
</head>
</html>


will be tokenized as



Then the block token will be set to LoadNode, var token to Variable Node  in my case, done byParser

最后把每一个node render出来

原文地址:https://www.cnblogs.com/james1207/p/3323198.html