在不同的占位符/模板上以不同的方式呈现 Django-CMS 插件

Posted

技术标签:

【中文标题】在不同的占位符/模板上以不同的方式呈现 Django-CMS 插件【英文标题】:Render Django-CMS plugins differently on different splaceholders/templates 【发布时间】:2014-01-12 14:28:24 【问题描述】:

短版:我想让同一种 cmsplugin 在不同的占位符中使用不同的模板。这可能吗?或者,我应该去制作我的自定义插件吗?

长版:使用 Django 和 Django-CMS 并使用 cmsplugin-video-youtube 插件,我在主页上有两个 youtube 视频,它们使用 Foundation 4 的网格系统设置样式,依次堆叠在其下方和浏览器宽度的某些“断点”,它们将并排。这一切都很好。

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

由于这些 YouTube 视频元素的数量是无限的,而不是预定义的,我不能使用网格系统。我想我会使用block grid 系统。这让我将元素创建为<u> 元素内的<li> 元素。这要求我更改 cmsplugin-video-youtube 元素的模板以在 YouTube 周围呈现那些 <li> 元素。这样做的问题是,如果我通过提供templates/cmsplugin-video-youtube/embed.html 覆盖此插件的模板,它也会覆盖它并为主页中的此插件实例更改它。我喜欢它们的本来面目。

所以我认为,如果有一种方法可以仅针对特定的placeholder 覆盖插件的模板,那将是有益的。这将允许我在我的其他页面中的特定 placeholder 中指定 YouTube 的呈现,并且不会影响我喜欢的主页中此插件的实例。

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

否则,我认为这可能需要一个基于现有 cmsplugin-video-youtube 的自定义插件,我假设它可能是它的一个子类,然后会有我需要的模板,带有 <li> 元素, 对于这个其他页面。

另一种方法是尝试迭代插件实例的实例,并用它们周围的整个 <ul><li> 东西一个一个地渲染它们。 I've inquired about this approach,根据我得到的一些答案,这似乎不是最简单的路线。

请问您对此有何看法?

我还没有收到答复。拜托,即使是指针也可以!

【问题讨论】:

【参考方案1】:

我知道这个问题很老了。 .但希望任何有同样问题的人都会发现这很有用。

查看 CMSPluginBase 的源代码:

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

context['placeholder'] = placeholder

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

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

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

【讨论】:

以上是关于在不同的占位符/模板上以不同的方式呈现 Django-CMS 插件的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 在设备上以不同的方式呈现基于 em 的字体大小

值/占位符 - 不同的文字样式

“渲染占位符”未出现在 django CMS 模板中

带有模板占位符的 Url Helper 路由

显示相同占位符内容的 Django-CMS apphook 模板

freemaker优缺点