Eve*_*ews 2 django django-templates
我已经创建了一个自定义模板标签,并希望在我的template.Node中有一个帮助器方法,但是当我调用辅助方法时,我得到了错误,
global name 'prepend_to_some_str' is not defined
Run Code Online (Sandbox Code Playgroud)
这是导致错误的代码.
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 ''
Run Code Online (Sandbox Code Playgroud)
当然,如果我将辅助方法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 ''
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么FooNode在全局范围内寻找prepend_to_some_str而不是导致错误的代码中的类范围?
谢谢.
| 归档时间: |
|
| 查看次数: |
5245 次 |
| 最近记录: |