在 Django 1.10 的 render_to_string 中使用 RenderContext

Using RenderContext in render_to_string in Django 1.10

我正在将项目升级到 Django 1.10 并尝试更改以下模板标签(已简化)

@register.simple_tag(takes_context=True)
def render_svg(context, svg_template_file_name, *args, **kwargs):
    svg_string = render_to_string(svg_template_file_name, context, request=context.request)

这不再有效,因为传入的 contextRenderContext, where the docs 状态:

If you’re passing a Context in context_instance, pass a dict in the context parameter instead. If you’re passing a RequestContext, pass the request separately in the request parameter.

我已经在做,但仍想将 context 参数用于 render_to_string...

那么如何从 RenderContext 中获取可用的字典?

RenderContext 的基础 class、BaseContext 有一个名为 flatten 的函数,它将获取上下文对象中的字典数组和 return 单个字典

render_to_string(svg_template_file_name, context, request=context.request)

需要改为

render_to_string(svg_template_file_name, context.flatten(), request=context.request)