2011-06-22 10 views
1

カスタムcmsプラグインを使用して別のページ内でcmsページをレンダリングしようとしています。 これは私のプラグインクラスです:他のページ内にcmsページをレンダリング

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

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

あなたはそれがないすべてはあなたが私が通過見ることができるように私は

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 

を持っている私のcms_plugins.pyにそのページへのプラグインをリンクされて見ることができるように提供されたページのhtmlをプラグインテンプレートに追加すると、プラグインテンプレートはプラグインをホストしているページ内でレンダリングされます。 私が抱えている問題は、foreignkeyで選択されたページのプレースホルダーのコンテンツがレンダリング(表示)されていないことです。 私の質問は、プログラムでページのプレースホルダーをレンダリングする方法はありますか?

答えて

2

あなたが何を記述するか(つまりページのプレースホルダーをプログラマチックにレンダリングする)カスタムプラグインを作成するという考えを無視して、達成しようとしている内容に応じて、 ...

"外側の" cmsページ(つまり、別のcmsページの内容を表示したいページ)のテンプレート内で、現在のページにアクセスできるようにする必要がありますこれは

{{ request.current_page }} 

です。これはcmsページミドルウェアによるものです。そこで、更なるステップは、あなたがこのようにページのプレースホルダにアクセスすることができなければならないことを取る:

あなたが別のページ「内の」ページのプレースホルダをレンダリングについては行くことができる一つの方法だ
{% for placeholder in request.current_page.placeholders %} 
    {{ placeholder.render }} 
{% endfor %} 

+0

うーん、この日に私はrequest.current_page.placeholdersについて知りませんでした。 – Paulo

+0

request.current_page.placeholders.allは必要ありませんか? – daigorocub

0

私は達成することができるテンプレートの中から別のページをレンダリングするために必要な:、おかげでD:

@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) 
関連する問題