2

カスタムテンプレートタグを作成し、template.Nodeにヘルパーメソッドを含めたいのですが、ヘルパーメソッドを呼び出すと、エラーが発生します。

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を探している理由を誰かが知っていますか?

ありがとう。

4

1 に答える 1

5

self最初の引数としてそれを定義し、次のように呼び出す必要があります。self.prepend_to_some_str(some_str)

于 2012-05-20T18:49:56.083 に答える