Как отобразить HTML-код плагина django CMS по идентификатору из Python

#python #django-cms

#python #django-cms

Вопрос:

Мой вариант использования — это необходимость рендеринга pdf-файла из данного плагина, хотя эта функция также может использоваться, например, для составления поискового индекса.

Ответ №1:

В кодовой базе django CMS есть cms.templatetags.render_alias_plugin код, который не является простым, но при удалении он может выглядеть следующим образом:

 def render_plugin(plugin: CMSPlugin, request: HttpRequest) -> str:
    plugins = plugin.get_descendants().order_by('placeholder', 'path')
    plugins = [plugin]   list(plugins)
    plugins = downcast_plugins(plugins, request=request)
    plugins = list(plugins)
    plugins[0].parent_id = None
    plugins = build_plugin_tree(plugins)
    renderer = get_toolbar_from_request(request).content_renderer
    html: str = renderer.render_plugin(
        instance=plugins[0],
        context={'request': request},
        editable=False,
    )
    return mark_safe(html)


cms_plugin = CMSPlugin.objects.get(id=cms_plugin_id)
render_plugin(cms_plugin, request)
 

При необходимости http-запрос также может быть подделан, пример этого можно найти здесь.