cms_plugin.py
@plugin_pool.register_plugin
class CarouselPlugin(CMSPluginBase):
name = _("Carousel")
model = CarouselPluginModel
exclude = ['slides']
inlines = [CarouselSlideInline]
render_template = "plugins/touts/carousel.html"
def render(self, context, instance, placeholder):
context['instance'] = instance
return context
models.py
class CarouselPluginModel(CMSPlugin):
slides = models.ManyToManyField('CarouselSlide', blank=True, related_name='slider_images')
content = PlaceholderField('content')
def slide_list(self):
return CarouselSlide.objects.filter(carousel=self).order_by('order')
def copy_relations(self, oldinstance):
self.slides = oldinstance.slides.all()
plugins/touts/carousel.html
{% load i18n staticfiles cms_tags menu_tags sekizai_tags %}
<div class="carousel">
{% render_placeholder instance.content %}
<div class="carousel__slider">
{% for slide in instance.slide_list %}
<div class="carousel__slider__slide" style="background-image: url('{{slide.image.url}}')">
<div class="carousel__heading"><h1>{{slide.title}}</h1></div>
<div class="carousel__sub-heading">
<p>{{slide.sub_title}}</p>
</div>
{% if slide.button_link %}
<a href="{{slide.button_link}}" class="carousel__button button-1">Learn More</a>
{% endif %}
</div>
{% endfor %}
</div>
</div>
I am planning to have two different CMS plugin named as 'Carousel' and 'Carousel Slide'. And as you can guess from their name, I'm trying to put placeholder inside of Carousel plugin so I can put Carousel Slides inside. It looks like CMS Plugin inside CMS Plugin. How can I achieve that kind of structure?