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