Если это плагин, который вы создаете здесь, то, начиная с версии 3.0, они управляются только из внешнего интерфейса :
В новой системе Placeholders
и их плагины больше не управляются на сайте администратора, а только из внешнего интерфейса.
Итак, есть различные атрибуты CMSPlugins
, которые, я думаю, вы найдете для этого полезными, включая некоторые стандартные плагины, которые поставляются с CMS. Вам также не нужно указывать атрибут plugin
в вашей модели, если он для плагина.
Я бы настроил ваш класс плагинов и соответствующую модель так, чтобы они были немного похожи;
# models.py
from cms.models.fields import PlaceholderField
class CardPanel(CMSPlugin):
title = models.CharField(max_length=50)
image = FilerImageField(
null=True,
blank=True,
related_name="navigation_vertical_link_image"
)
content = PlaceholderField('card_panel_content')
# cms_plugins.py
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
from .models import CardPanel
@plugin_pool.register_plugin
class CardPanel(CMSPluginBase):
""" Plugin to contain card panels """
model = CardPanel
parent_classes = ['Panel'] # Include this if a card panel only exists in a panel
@plugin_pool.register_plugin
class Panel(CMSPluginBase):
""" Plugin to contain card panels """
model = CMSPlugin
allow_children = True # Allow the Panel to include other plugins
child_classes = ['CardPanel']
Включив PlaceholderField
в CardPanel
, вы можете отобразить заполнитель для экземпляра модели и добавить плагины CMS к этому экземпляру так же, как вы можете добавить их на страницу. Таким образом, вы можете просто добавить столько плагинов для ссылок, сколько вам нужно, и этот плагин , если вы его не используете, допускает ссылки на страницы или внешние ссылки.
Поле заполнителя отображается в шаблоне следующим образом:
{% load cms_tags %}
{% render_placeholder card_panel_instance.content %}
PlaceholderField
также может быть зарегистрирован с помощью администратора; http://docs.django -cms.org / ен / последний / how_to / placeholders.html # админ-интеграция