Django:"global name 'xxx' is not defined"自定义模板标签节点



我已经创建了一个自定义模板标签,并希望在我的模板中有一个帮助程序方法。节点,但是当我调用帮助程序方法时出现错误,

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?

谢谢。

你应该用self定义它作为第一个参数,并调用如下: self.prepend_to_some_str(some_str)

最新更新