Использование RenderContext в render_to_string в 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)

Это больше не работает, так как context прошло в это RenderContext где в документе указано:

Если вы передаете Context в context_instance, вместо этого передайте dict в параметре context. Если вы передаете RequestContext, передайте запрос отдельно в параметре request.

Что я уже делаю и все еще хотел бы использовать context параметр для render_to_string...

Так как я могу получить полезный словарь от RenderContext?

1 ответ

Решение

RenderContext базовый класс, BaseContext, имеет функцию под названием flatten который возьмет массив словарей внутри объекта Context и вернет один словарь

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

потребуется изменить на

render_to_string(svg_template_file_name, context.flatten(), request=context.request)
Другие вопросы по тегам