Django CMS Apphook 不加载

Posted

技术标签:

【中文标题】Django CMS Apphook 不加载【英文标题】:Django CMS Apphook does not load 【发布时间】:2019-01-14 13:55:17 【问题描述】:

我有一个新的 Django CMS 设置,其中安装了以下组件 (requirements.txt):

Django==1.11
Pillow==5.0.0
psycopg2-binary==2.7.4
django-ckeditor==5.4.0
django-cms==3.5.1
djangocms-text-ckeditor>=3.6.0

还有如下文件结构:

.
├── main_app
│   ├── admin.py
│   ├── admin.pyc
│   ├── apps.py
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   ├── models.py
│   ├── models.pyc
│   ├── __pycache__
│   ├── tests.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── views.py
│   └── views.pyc
├── project
│   ├── cms_apps.py
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── local_settings.py
│   ├── local_settings.pyc
│   ├── production.py
│   ├── production.pyc
│   ├── __pycache__
│   ├── settings.py
│   ├── settings.pyc
│   ├── static
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── templates
│   ├── 404.html
│   ├── base.html
│   └── ...
├── manage.py
└── requirements.txt

当我添加一个 Apphook 时,我无法在高级页面设置中选择应用程序:

项目/cms_apps.py:

from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool

@apphook_pool.register
class MainApphook(CMSApp):
    app_name = 'main_app'
    name = 'Main App'

    def get_urls(self, page=None, language=None, **kwargs):
        return ["main_app.urls"]

我在 settings.py 中安装的应用程序:

INSTALLED_APPS = [
    'custom_auth',
    'djangocms_admin_style',

    'django.contrib.sites',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'djangocms_text_ckeditor',
    'cms',
    'menus',
    'treebeard',
    'sekizai',
    'ckeditor',

    'main_app',
]

我已经按照http://docs.django-cms.org/en/latest/introduction/apphooks.html的教程重启了服务器

注意这里没有project/cms_apps.pyc

据我所知,我完全按照 Apphook 教程进行操作,所以我缺少什么?

【问题讨论】:

如果main_app 应该被应用程序吸引,那么它需要它自己的cms_apps.py,而不是project 中的一个 天哪,我完全误解了那里的概念。所以我会通过 main_app:my-url 访问应用程序的 url?因为现在模板中引用的 url 在没有命名空间时似乎不起作用。 希望我的回答能涵盖所有这些。 【参考方案1】:

好的,所以您需要在您的应用中添加一个 cms_apps.py 模块,该模块可以连接到 CMS。

例如,我有一个名为 djangocms_forms 的应用程序,它的 cms_apps.py 看起来像这样;

class DjangoCMSFormsApphook(CMSApp):
    """ Add docs """
    name = _('Forms')
    urls = ['djangocms_forms.urls']


apphook_pool.register(DjangoCMSFormsApphook)

它有以下网址;

urlpatterns = [
    url(r'^forms/submit/$', FormSubmission.as_view(),
        name='djangocms_forms_submissions'),
    url(r'^forms/redirect/$', media_redireect,
        name='djangocms_forms_redirect')
]

然后访问这些 URL,而不使用任何命名空间,例如 reverse('djangocms_forms_submissions')

但是,您可以通过将app_name 属性添加到CMSApp 来添加命名空间。例如我有另一个应用程序,gallery,其配置如下:

class GalleryApp(CMSApp):
    """ Gallery CMS app """
    app_name = 'gallery'
    name = _("Gallery App")
    urls = ["gallery.urls"]

然后,此应用的 URL 被定义为 % url "gallery:filterable_gallery_data" % 或在 python 中为 reverse('gallery:filterable_gallery_data')

【讨论】:

以上是关于Django CMS Apphook 不加载的主要内容,如果未能解决你的问题,请参考以下文章

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

djangocms与apphook对象集成filer_image

Django CMS如何为同一个apphook的2个实例使用不同的url

从祖先继承的 Django CMS 模板不识别占位符

Django CMS 自定义插件从 cms_title 加载数据

使用 Amazon S3 静态存储进行静态加载的 django-cms_text_ckeditor 错误