【问题标题】:How to render placeholders from a django-cms custom templatetag?如何从 django-cms 自定义模板标签呈现占位符?
【发布时间】:2013-10-18 13:21:01
【问题描述】:

我制作了一个简单的模板标签来列出 django-cms 站点中的子页面。 除了我无法在模板标签本身中呈现子页面占位符之外,它工作正常。

以下是我的模板标签代码。

subpages.py

from cms.models import Page
from cms.utils.page_resolver import get_page_from_path

from django import template


register = template.Library()


@register.inclusion_tag('subpages.html', takes_context = True)
def get_news_items( context ):
    request = context['request']
    subpages = request.current_page.children.filter(published=True)
    return {'subpages':subpages}

subpages.html

{% load cms_tags menu_tags placeholder_tags %}
<ul>
{% for item in subpages %}
    <li><a href="/{{ item.get_path }}">{{ item.get_title }}</a>
        {% render_placeholder subtitle %}
    </li>
{% endfor %}
</ul>

我尝试了一些 *render_placeholder* 的替代方案,但没有运气。

如何正确渲染占位符?

【问题讨论】:

  • {% render_placeholder [placeholder] %} 期望接收占位符实例。我猜subtitle 不是正确的类型。
  • 副标题是我的占位符在子页面中的命名方式,正确的类型是什么意思?在我的页面模板中,我有:{% placeholder subtitle %},它可以工作。
  • 据我所知,您不能按名称渲染占位符,您必须将占位符实例交给{% render_placeholder %},就像模型上的占位符字段一样。见:docs.django-cms.org/en/2.4.2/extending_cms/…
  • 我明白了,如果我在模板的 for 语句中执行 item.placeholders.all,我确实得到了占位符名称,那么,正确的参数是什么传递给 render_placeholder?像 item.placeholder.subtitle 这样的东西不起作用。
  • 我会尝试:item.placeholder,因为这是对对象的引用。

标签: python django django-cms django-templates


【解决方案1】:

这只是一个(未经测试的)建议,但请尝试将上下文传递给模板:

@register.inclusion_tag('subpages.html', takes_context = True)
def get_news_items( context ):
    request = context['request']
    subpages = request.current_page.children.filter(published=True)
    context.update({'subpages':subpages})
    return context

【讨论】:

  • 感谢您的建议,但我测试了它,它似乎不起作用。
  • 有没有办法在自定义模板标签模板中放置这样的模板标签标签:{% placeholder "subtitle" %} 并正确呈现和安全插件?
猜你喜欢
  • 2015-05-20
  • 2013-04-05
  • 2015-09-09
  • 2012-12-18
  • 2015-03-14
  • 2014-12-10
  • 2017-10-26
  • 2018-11-11
  • 2020-04-19
相关资源
最近更新 更多