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 %}

これは、ページのプレースホルダーを別のページの「内部」にレンダリングする方法の1つです。

于 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 に答える