2012-10-18 197 views
0

我想写一个urldecode模板过滤器和我我用下面的代码的应用程序下有一个模板标记的文件夹:Django的自定义过滤器超过

from django import template 
from urllib import unquote 

register = template.Library() 

@register.filter 
def unquote(value): 
    return unquote(value) 

class SetVarNode(template.Node): 

    def __init__(self, var_name, var_value): 
     self.var_name = var_name 
     self.var_value = var_value 

    def render(self, context): 
     try: 
      value = template.Variable(self.var_value).resolve(context) 
     except template.VariableDoesNotExist: 
      value = "" 
     context[self.var_name] = value 
     return u"" 

@register.tag(name='set') 
def set_var(parser, token): 
    """ 
     {% set <var_name> = <var_value> %} 
    """ 
    parts = token.split_contents() 
    if len(parts) < 4: 
     raise template.TemplateSyntaxError("'set' tag must be of the form: {% set <var_name> = <var_value> %}") 
    return SetVarNode(parts[1], parts[3]) 

话,我打电话给我的临时用户过滤器在我的模板是这样的:

kmz.file |所享有

任何想法,为什么?

+0

为什么呢?无论如何,例如,您应该将过滤器重命名为'unquote_filter'。 –

回答

1

这是因为你导入了引号,然后重新定义它。

使用这个代替:

from urllib import unquote as unquote_old 

@register.filter 
def unquote(value): 
    return unquote_old(value) 

from urllib import unquote 

@register.filter 
def unquote_new(value): 
    return unquote(value) 
+1

这就是它,谢谢(我用第二个) – psychok7