2012-10-18 234 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