在不同的splaceholders / templates上以不同方式呈现Django-CMS插件

时间:2013-12-24 10:33:41

标签: layout django-templates zurb-foundation django-cms override

简短版本:我希望使用相同类型的cmsplugin在不同的占位符中使用不同的模板。这可能吗?或者,我应该去制作我的自定义插件吗?

长版:使用Django和Django-CMS并使用cmsplugin-video-youtube插件,我在主页上有两个youtube视频,它们使用Foundation 4的网格系统进行样式设置,然后在其下方堆叠一个,然后再覆盖另一个在浏览器宽度的某个“突破点”,它们将是并排的。这一切都运作良好。

现在,我想在不同的placeholder中添加一些不限数量的YouTube视频,这些视频位于不同的页面中,这是不同的模板。我希望它们在前者之下呈现一个,依此类推,在浏览器宽度的某个“断点”上,它们将是水平并排对,一对低于前者,依此类推。

由于这些YouTube视频元素是无限制的,而非预定义的数字,因此我无法使用网格系统。我想我会使用block grid系统。这让我在<li>元素中创建了<u>个元素。这要求我更改cmsplugin-video-youtube元素的模板,以在YouTubes周围呈现这些<li>元素。这个问题是,如果我覆盖这个插件的模板,通过提供templates/cmsplugin-video-youtube/embed.html,它也会覆盖它并为主页中的这个插件的实例改变它。而且我喜欢它们。

所以我认为,只为特定的placeholder覆盖一个插件的模板是有益的。这样我就可以在我的其他页面中的特定placeholder中指定YouTube的渲染,而不会影响我的主页中此插件的实例,我喜欢它们。

是否有这样的选项 - 覆盖特定placeholder的插件模板?

否则,我认为这可能需要一个基于现有cmsplugin-video-youtube的自定义插件,也许是它的一个子类,我认为,那将有我需要的模板,{{ 1}}元素,用于其他页面。

另一种方法是尝试迭代插件实例的实例,并逐个呈现它们周围的整个<li>事物。 I've inquired about this approach根据我得到的一些答案,它似乎不是最简单的路线。

请问您的方法是什么?

我还没有收到回复。拜托,即使指针也是如此!

1 个答案:

答案 0 :(得分:2)

我知道这个问题很老了。但希望任何有相同问题的人都会觉得这很有用。

查看CMSPluginBase的源代码:

https://github.com/divio/django-cms/blob/develop/cms/plugin_base.py

context['placeholder'] = placeholder

占位符在render方法中作为上下文传递。

因此,在模板中,您可以使用它来呈现不同的输出。一个很好的例子:

https://github.com/stefanfoulis/cmsplugin-filer/blob/develop/cmsplugin_filer_image/templates/cmsplugin_filer_image/plugins/image/default.html