【问题标题】:How to render the HTML of a django CMS plugin by id from Python如何通过 Python 中的 id 呈现 django CMS 插件的 HTML
【发布时间】:2021-03-09 12:06:32
【问题描述】:

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

【问题讨论】:

    标签: python django-cms


    【解决方案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 请求,可以在 here 找到一个示例。

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2013-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      相关资源
      最近更新 更多