FeinCMS:获取模板中后续内容块的属性

时间:2014-04-23 10:33:23

标签: django django-templates feincms

如何在呈现RichTextContent的模板中获取有关后续FeinCMS内容块的信息?

获取类名这样的东西是理想的,但访问模型的字段也会对我有帮助。

1 个答案:

答案 0 :(得分:3)

开箱即用,无法展望下一个内容块。你到底想要完成什么?

我们经常不得不在另一个<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

在您的模板中,您将使用{% feincms_render_region feincms_page 'region' request %}代替{% cms_render_region feincms_page 'region' request %}来渲染该区域。

您可以将渲染模板的逻辑调整为您想要完成的任何操作。内容块位于page.content.{{ region }}中,例如page.content.sidebar