• 为django写的一个source的tag


    #coding=utf-8
    from django import template
    
    register = template.Library()
    
    #register.tag('source', do_source)
    @register.tag(name="source")
    def do_source(parser, token):
        """
          source can direct insert method return string into html
          {% source myapp mymethod %}
          or
          {% source myapp mymethod arg0 arg1 arg2 %}
          or
          {% source myapp mymethod arg0,arg1,arg2 %}
        """
        try:
            # split_contents() knows not to split quoted strings.
            args = token.split_contents()
        except ValueError:
            raise template.TemplateSyntaxError("%r tag requires at least two arguments" % token.contents.split()[0])
        if len(args) < 2:
            raise template.TemplateSyntaxError("%r tag requires at least two arguments" % token.contents.split()[0])
        model_name = args[1]
        method_name = args[2]
        params = []
        if len(args) >=3:
            params += args[3:]
        if len(params) == 1:
            if ',' in params[0]:
                params = ['%s' % arg for arg in params[0].split(",")]
        # try to import this method
        try:
            models = __import__(model_name, fromlist = [method_name])
            method = getattr(models, method_name)
        except:
            raise template.TemplateSyntaxError("Can't import %s[%s]" % (model_name, method_name))
    
        return SourceNode(method, params)
    
    class SourceNode(template.Node):
        def __init__(self, method, params):
            self.method  = method
            self.params  = params
    
        def render(self, context):
            try:
                value = self.method(context, (arg for arg in self.params))
            except:
                from django.conf import settings
                if settings.DEBUG:
                    import sys,traceback
                    str = '<p> [%s] [%s] </p>' % (self.method, self.params)
                    str += '<p> [%s] </p>' % traceback.format_exception(*sys.exc_info())
                    return str
                else:
                    return str
            return value
  • 相关阅读:
    codeforces #330 div2
    codeforces #332 div2
    Codeforces Round #331 (Div. 2)C. Wilbur and Points
    poj 01背包
    zoj 1200 Mining
    nginx反向代理与负载均衡
    springcloud----config分布式配置中心
    springcloud--zuul 网关
    springcloud ----Hystrix熔断器
    docker私有镜像仓库harbor搭建和配置
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/3012562.html
Copyright © 2020-2023  润新知