Я столкнулся с этой проблемой, следуя базовому примеру для Django CMS 3. В этом примере предполагается, что будет работать следующий код (с соответствующим шаблоном на месте):
#cms_plugins.py
from cms.models.pluginmodel import CMSPlugin
class HelloPlugin(CMSPluginBase):
model = CMSPlugin
render_template = "hello_plugin.html"
plugin_pool.register_plugin(HelloPlugin)
Однако я обнаружил, что при использовании CMSPlugin
в качестве модели плагин не отображается в редакторе структуры страницы.
Это несмотря на тот факт, что плагин:
- В корневом каталоге приложения, которое указано в
INSTALLED APPS
- В приложении был файл
models.py
(но плагин не использовал ни одну из этих моделей)
- Файл
cms_plugins.py
может быть импортирован из оболочки django
Попробуйте выполнить импорт оболочки django, как показано на странице примера:
$ python manage.py shell
>>> from django.utils.importlib import import_module
>>> m = import_module("myapp.cms_plugins")
Решением было использование модели, определенной в файле models.py
, которая расширяет CMSPlugin:
#cms_plugins.py
from .models import MyModel
class HelloPlugin(CMSPluginBase):
model = MyModel
render_template = "hello_plugin.html"
plugin_pool.register_plugin(HelloPlugin)
# models.py
class MyModel(CMSPlugin):
pass
Как и магия, плагин был добавлен в список «Общие» в редакторе структуры страницы.