Django-CMS插件没有出现

时间:2011-07-21 03:05:08

标签: django django-cms

我正在部署Django网站。我在计算机上运行的所有自定义插件(我可以从下拉列表中将它们添加到模板块中。)但是当我将代码推送到站点时,并非所有插件都可用。

创建了数据库表,如果我导入plugin_pool并调用discover_plugins()然后get_all_plugins(),则会显示所有插件。所以我的问题是,为什么我的插件不显示?有什么想法吗?

2 个答案:

答案 0 :(得分:4)

您的应用是否包含cms_plugins.py中的插件(INSTALLED_APPS文件)?

是否有models.py(可能为空)文件?

使用cms_plugins.py时可以导入python manage.py shell文件吗?

最常见的问题是cms_plugins.py文件中的导入错误

答案 1 :(得分:3)

我在关注Django CMS 3的basic example时遇到了这个问题。该示例表明以下代码可以使用(使用相关模板):

#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作为模型时,插件在页面结构编辑器中不可见。

尽管插件是:

  1. 在项目的INSTALLED APPS
  2. 中列出的应用的根目录中
  3. 该应用有models.py个文件(但该插件未使用任何此类型号)
  4. 可以从django shell
  5. 导入cms_plugins.py文件

    尝试使用django shell导入,如示例页面所示:

    $ 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
    

    与魔术一样,该插件随后列在页面结构编辑器的“Generic”下。