Django:“;全球名称';xxx和x27;“未定义”;在自定义模板标记节点中

Django:“;全球名称';xxx和x27;“未定义”;在自定义模板标记节点中,django,django-templates,Django,Django Templates,我已经创建了一个自定义模板标记,希望在template.Node中有一个helper方法,但是当我调用helper方法时,出现了错误 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 regis

我已经创建了一个自定义模板标记,希望在template.Node中有一个helper方法,但是当我调用helper方法时,出现了错误

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 ''
当然,如果我将helper方法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 ''
有人知道为什么FoonNode在导致错误的代码中,在全局范围而不是类范围中查找prepend_to_some_str吗


谢谢。

你应该用
self
作为第一个参数来定义它,然后像这样调用:
self.prepend_to_some_str(some_str)
你应该用“self”作为第一个参数来定义它,然后像这样调用:self.prepend_to_some_str(some_str)GAH!真不敢相信我错过了……哎呀。这很有效。如果您想将其添加为答案,我会将其设置为已接受。