gpt4 book ai didi

Django: "global name ' xxx' is not defined"in custom template tag Node

转载 作者:行者123 更新时间:2023-12-02 05:43:10 29 4
gpt4 key购买 nike

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

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)

关于Django: "global name ' xxx' is not defined"in custom template tag Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675748/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com