zoukankan      html  css  js  c++  java
  • 为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
  • 相关阅读:
    java各种框架的比较,分析
    HTTP请求响应码
    jersey获取各个参数的总结
    web项目中各种路径的获取
    netsh学习
    解决sqlplus: command not found
    win10 提速
    解决win10 64位系统可用2.99g
    Windows10关闭SearchUI.exe进程的方法
    msf payload
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/3012562.html
Copyright © 2011-2022 走看看