编写Django模板标签,我收到VariableDoesNotExist错误

时间:2014-05-15 15:34:48

标签: django django-templates

这是我的第一个模板标签,我在其中与上下文变量进行交互。所以我可能做错了。

我想为对象传入PK。所以,像这样:

{% get_checkbox with object.id %}

那将使用object.id为该对象进行获取。如果它存在则呈现一些HTML,如果不呈现不同的HTML。我将此作为模板标记,因为我有记录后会进行更多的高级过滤。但我需要先获取上下文变量。

然后在模板标签中我想做这样的事情:

from django import template
from project.app.models import Model


register = template.Library()


class ModelNode(template.Node):
    def __init__(self, object_id):
        self.object_id = template.Variable(object_id)

    def render(self, context):
        o_id = self.object_id.resolve(self.object_id)
        obj = Model.objects.get(id=o_id)
        if obj:
            return '<h3>Not yet</h3>'
        else:
            return '<h3>Go ahead</h3>'


@register.tag
def get_checkbox(parser, token):
    """
    Usage::
        {% get_checkbox with [object_id] %}

    """
    bits = token.contents.split()
    tag_name = bits[0]

    if len(bits) != 3:
        raise template.TemplateSyntaxError, "%s tag takes exactly two arguments" % (tag_name)
    if bits[1] != 'with':
        raise template.TemplateSyntaxError, "second argument to the %s tag must be 'with'" % (tag_name)

    object_id = bits[2]

    return ModelNode(object_id)

但我收到以下错误:

VariableDoesNotExist at /app/
Failed lookup for key [object] in u'object.id'

似乎变量未在模板标记中解析?

我喜欢建议和更正。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

问题如下:

o_id = self.object_id.resolve(self.object_id)

应该是:

o_id = self.object_id.resolve(context)