自定义模板获取上下文:为什么上下文是RequestContext而不是字典?

时间:2019-01-18 08:31:10

标签: python django

我有许多使用上下文的自定义标签:

@register.assignment_tag(takes_context=True)
@register.simple_tag(takes_context=True)

例如:

@register.assignment_tag(takes_context=True) 
def get_items(context):
    return context['obj'].items.all()

但是显然context对象不像view.get_context_data返回的字典那样,而是contextRequestContext对象,它更多的是字典列表带有一些条目和嵌套数据。上下文数据以某种嵌套结构埋在其中,但是我不知道如何访问它。

文档建议,如果您的视图中包含以下上下文数据:

context = {'obj': instance}

在自定义标记函数中访问context['obj']时,您将访问相同的上下文。但这似乎并非如此。

为什么contextRequestContext而不是数据字典,就像文档建议的那样?

然后如何在自定义标签中访问上下文数据?

1 个答案:

答案 0 :(得分:1)

RequestContext实现字典接口。它 与您通常在模板中使用的视图传递的内容相同。您只需像访问其他任何词典一样访问您的项目,context['obj']就可以正常工作。