代码之家  ›  专栏  ›  技术社区  ›  dabadaba

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

  •  0
  • dabadaba  · 技术社区  · 6 年前

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

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

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

    context = {'obj': instance}
    

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

    为什么是 语境 请求上下文 而不是数据字典,就像文档建议的那样?

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Daniel Roseman    6 年前

    RequestContext实现字典接口。它 与通常在模板中使用的视图传递的相同。你只需像其他字典一样访问你的物品,以及 context['obj'] 工作会很好。