在不同的占位符/模板上以不同的方式呈现 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 的字体大小