2012-05-20 78 views
2

我創建了一個自定義模板標籤,並希望在我的template.Node中有一個輔助方法,但是當我調用輔助方法時,錯誤,Django:自定義模板標籤中沒有定義「全局名稱xxx」節點

global name 'prepend_to_some_str' is not defined 

下面是導致錯誤的代碼。

from django import template 
from django.template.loader import render_to_string 
from easy_maps.models import Address 
register = template.Library() 

@register.tag 
def foo(parser, token): 
    params = token.split_contents() 
    return FooNode(params[1]) 

class FooNode(template.Node): 
    def __init__(self, some_str): 
     self.some_str = template.Variable(some_str) 

    def prepend_to_some_str(some_str): 
     return "foo" + some_str 

    def render(self, context): 
     try: 
      some_str = self.some_str.resolve(context) 

      context.update({ 
       'full_str': prepend_to_some_str(some_str), 
      }) 
      return render_to_string('foo.html', context_instance=context) 
     except template.VariableDoesNotExist: 
      return '' 

當然,如果我移動的輔助方法prepend_to_some_str它工作得很好,如下面的代碼在全球範圍內。

from django import template 
from django.template.loader import render_to_string 
from easy_maps.models import Address 
register = template.Library() 

@register.tag 
def foo(parser, token): 
    params = token.split_contents() 
    return FooNode(params[1]) 

def prepend_to_some_str(some_str): 
    return "foo" + some_str 

class FooNode(template.Node): 
    def __init__(self, some_str): 
     self.some_str = template.Variable(some_str) 

    def render(self, context): 
     try: 
      some_str = self.some_str.resolve(context) 

      context.update({ 
       'full_str': prepend_to_some_str(some_str), 
      }) 
      return render_to_string('foo.html', context_instance=context) 
     except template.VariableDoesNotExist: 
      return '' 

有誰知道爲什麼FooNode在全球範圍內,而不是在導致該錯誤代碼的類的範圍內尋找prepend_to_some_str?

謝謝。

+1

你應該「自我」將其定義爲第一個參數,調用諸如: self.prepend_to_some_str(some_str) –

+0

GAH!不能相信我錯過了......哎呀。這工作。如果您想將其添加爲答案,我會將其設置爲已接受。 –

回答

5

你應該self將其定義爲第一個參數,調用諸如:self.prepend_to_some_str(some_str)

相關問題