1

我正在尝试使用自定义 cms 插件在另一个页面中呈现 cms 页面。这是我的插件类:

class PageInDiv(CMSPlugin):
    page_div = models.ForeignKey(Page, verbose_name= "page")

    def __unicode__(self):
        return self.page_div.get_title()

如您所见,它所做的只是将插件链接到一个页面,然后在我的 cms_plugins.py 上

class PageInDivPlugin(CMSPluginBase):
    model = PageInDiv
    name = _("Page in div")
    render_template = "page.html"
    admin_preview = False

    def render(self, context, instance, placeholder):
        temp = loader.get_template(instance.page_div.get_template())
        html = temp.render(context)
        context.update({
            'html': html,
            'title':instance.page_div.get_title(),
            'placeholder':placeholder,
        })
        return context

如您所见,我将所提供页面的 html 传递给插件模板,然后插件模板在托管插件的页面中呈现。我遇到的问题是通过外键选择的页面中的占位符内容没有被呈现(显示)。所以我的问题是,有没有办法以编程方式呈现页面占位符?

4

2 回答 2

2

暂时忽略创建自定义插件以执行您描述的操作(即,以编程方式呈现页面的占位符)的想法,以下可能是一个可行的替代方案,具体取决于您想要实现的目标......

您应该能够,只是在您的“外部” cms 页面(即,您要在其中显示另一个 cms 页面内容的页面)的模板中,访问当前页面,如下所示:

{{ request.current_page }}

这是由于 cms 页面中间件。因此,更进一步,您应该能够像这样访问页面的占位符:

{% for placeholder in request.current_page.placeholders %}
    {{ placeholder.render }}
{% endfor %}

这是您可以在另一个页面“内部”呈现页面占位符的一种方式。

于 2011-10-04T04:42:20.557 回答
0

我需要从模板中渲染另一个页面,这可以通过以下方式完成:

@register.simple_tag(takes_context=True)
def render_page(context, page, default="base.html"):
    if not page:
        return loader.get_template(default).render(context)
    new_context = copy(context)
    new_context['request'] = copy(context['request'])
    new_context['request'].current_page = page
    new_context['current_page'] = page    
    new_context['has_change_permissions'] = page.has_change_permission(context['request'])
    new_context['has_view_permissions'] = page.has_view_permission(context['request'])
    if not new_context['has_view_permissions']:
         return loader.get_template(default).render(context)
    return loader.get_template(page.get_template()).render(new_context)
于 2015-10-01T05:39:43.283 回答