【发布时间】:2014-04-23 10:33:23
【问题描述】:
如何在呈现RichTextContent 的模板中获取有关后续 FeinCMS 内容块的信息?
获得类名之类的东西是理想的,但访问模型的字段也会对我有所帮助。
【问题讨论】:
标签: django django-templates feincms
如何在呈现RichTextContent 的模板中获取有关后续 FeinCMS 内容块的信息?
获得类名之类的东西是理想的,但访问模型的字段也会对我有所帮助。
【问题讨论】:
标签: django django-templates feincms
开箱即用的方式无法提前查看下一个内容块。你到底想完成什么?
我们经常不得不将多个相同类型的内容块包装在另一个具有特定类的<div> 中。我们通过自定义模板标签(使用django-ttag library)实现了这一点:
import ttag
from feincms.templatetags.feincms_tags import _render_content
@register.tag
class CmsRenderRegion(ttag.Tag):
'''
Renders a FeinCMS template region, just like feincms.templatetags.feincms_tags.render_region.
However, it checks each content type for a field "wrapper_css_classes". If the content type
has such a class, it adds a surrounding <div class="{{ wrapper_css_classes }}"> to all sequential
content types with that class.
'''
page = ttag.Arg()
region = ttag.Arg()
request = ttag.Arg()
def render(self, context):
data = self.resolve(context)
s = u''
last_wrapper = None
for content in getattr(data['page'].content, data['region']):
current_wrapper = getattr(content, 'wrapper_css_tag', None)
if current_wrapper is None:
if last_wrapper is not None:
# close the previous wrapper
s += u'</%s>' % last_wrapper[0]
else:
if last_wrapper is None:
s += u'<%s class="%s">' % current_wrapper
elif last_wrapper != current_wrapper:
s += u'</%s><%s class="%s">' % (
last_wrapper[0], current_wrapper[0], current_wrapper[1])
last_wrapper = current_wrapper
s += _render_content(content, request=data['request'], context=context)
if last_wrapper is not None:
s += u'</%s>' % last_wrapper[0]
return s
在您的模板中,您将使用{% cms_render_region feincms_page 'region' request %} 代替{% feincms_render_region feincms_page 'region' request %} 来渲染该区域。
您可以使渲染模板的逻辑适应您想要完成的任何任务。内容块在page.content.{{ region }},例如page.content.sidebar。
【讨论】: