首页 > 解决方案 > 自定义模板标签获取上下文:为什么上下文是 RequestContext 而不是字典?

问题描述

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

@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,而是context一个RequestContext对象,它更像是一个包含一些条目和嵌套数据的字典列表。上下文数据以某种嵌套结构埋在那里,但我不知道如何访问它。

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

context = {'obj': instance}

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

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

那么如何访问我的自定义标签中的上下文数据呢?

标签: pythondjango

解决方案


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


推荐阅读