отрисовать страницу cms на другой странице - PullRequest
1 голос
/ 22 июня 2011

Я пытаюсь отобразить страницу 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 для предоставленной страницы в шаблон плагина, затем шаблон плагина отображается на странице, на которой размещается плагин.Проблема, которую я имею, состоит в том, что содержание заполнителя со страницы, выбранной с помощью Foreignkey, не отображается (отображается).Итак, мой вопрос: есть ли способ визуализировать заполнители страниц программно?

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

На мгновение игнорируя идею создания пользовательского плагина для того, чтобы делать то, что вы описываете (например, визуализировать заполнители страницы программно), следующее может быть жизнеспособной альтернативой, в зависимости от того, чего именно вы пытаетесь достичь. ..

Вы должны иметь возможность, просто в шаблоне для своей "внешней" страницы CMS (т. Е. Страницы, на которой вы хотите отобразить содержимое другой страницы CMS), получить доступ к текущей странице следующим образом:

{{ request.current_page }}

Это благодаря промежуточному программному обеспечению страницы cms. Так что, сделав этот шаг дальше, вы сможете получить доступ к заполнителям страницы следующим образом:

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

Это один из способов визуализации заполнителей страницы "внутри" другой страницы.

0 голосов
/ 01 октября 2015

Мне нужно было визуализировать другую страницу из шаблона, что можно сделать с помощью:

@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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...