如何通过来自 Python 的 id 呈现 django CMS 插件的 HTML
How to render the HTML of a django CMS plugin by id from Python
我的用例是需要从给定的插件中呈现 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 请求,可以找到一个例子 here。
我的用例是需要从给定的插件中呈现 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 请求,可以找到一个例子 here。