这是我的第一个模板标签,我在其中与上下文变量进行交互。所以我可能做错了。
我想为对象传入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'
似乎变量未在模板标记中解析?
我喜欢建议和更正。谢谢你的时间。
答案 0 :(得分:0)
问题如下:
o_id = self.object_id.resolve(self.object_id)
应该是:
o_id = self.object_id.resolve(context)