如何通过Python中的id来呈现django CMS插件的HTML



我的用例是需要从给定的插件中呈现pdf,尽管该函数也可能用于例如搜索索引合成。

在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请求也可以伪造,可以在这里找到一个例子。

最新更新