【问题标题】:django-cms + grappellidjango-cms + grappelli
【发布时间】:2011-08-02 01:51:48
【问题描述】:


如果有人知道如何让 django-cms 与 grappelli 一起玩,请提供一些提示

【问题讨论】:

    标签: django integration django-cms django-grappelli


    【解决方案1】:

    好吧,我刚刚经历了一场相当史诗般的冒险,其中的故事可能对你有所帮助。上述冒险的终点是让 django-cms 2.1.3 与 django-filebrowser-no-grappelli 一起工作。虽然这听起来可能与您想要的相反,但我最终还是因为我真正想要的是让 django-cms 与文件浏览器一起工作。没有 grappelli 虽然标准的 django-filebrowser 不能按预期工作。但是使用 grappelli django-cms 不能按预期工作。引用莎士比亚的话,这就是问题所在。让 django-cms 与 filebrowser 一起工作相对简单,除了当尝试使用 uploadify(文件浏览器附带)上传文件时,在文件对话框中选择文件后,什么也没发生。最终我发现这是因为 jquery 库被加载了两次:一次是由 filebrowser 用于 uploadify,一次是由 django-cms。所以通过注释掉这个文件中的第二行:

    您的站点包目录/cms/templates/cms/toolbar/toolbar.html

    加载 jquery.min.js,uploadify 按预期工作。 Soooo ...如果您只想让 django-cms 与 grappelli 一起使用,以便您可以使用文件浏览器,那么上述内容可能会有所帮助。 Here 是我的设置文件供参考。

    【讨论】:

    • 感谢您的回复。至于我,文件浏览器不是使用 grappelli 的理由;)。虽然我曾经遇到过这个问题。不能说这是一次相当史诗般的冒险:) 但修复它需要一些时间。所以我想将 grappelli 用于其流畅的 UI。
    • 嗯,是的,它只是花了一点时间来修复,因为没有 JavaScript 错误,因此更难调试。但我突然想到,由于 jquery 被加载两次,uploadify 无法正常工作的根本原因是 django-cms 工具栏显示在管理界面中,但仅显示在文件浏览器窗口中。我怀疑当您处于管理员状态时,工具栏甚至可能不应该出现。因此,更好的解决方法可能是首先找出工具栏出现的原因,然后阻止这种情况发生。不管怎样,让我们​​知道你如何使用 django-cms + grappelli ...
    • 只是上面的更新..显示 django-cms 工具栏是因为我错误地包含了 url(r'^filebrowser/', include('filebrowser.urls')) 除了 url (r'^admin/filebrowser/', 包括('filebrowser.urls'))。我所需要的只是后者。然而,我确实发现了与 TinyMCE 和文件浏览器以及 django-cms 工具栏类似的问题,我已经开始讨论 here
    【解决方案2】:

    我的解决方案是实现 2 个子域,“www”和“cms”,在每个子域中运行 Django 站点的单独实例,使用不同的 STATIC_ROOT 和修改后的 INSTALLED_APPS。 grappelli 在“www”子域中运行。它不在“cms”子域中运行,因此您可以在那里使用 django-cms。

    • 设置子域:cms.example.com

    • 修改您的网络服务器以提供此子域。使用与主 django 站点相同的设置,但指向不同的脚本处理程序。例如如果使用wsgi直接服务器运行wsgi_cms.py

    • cp wsgi.py wsgi_cms.py。编辑wsgi_cms.py 并更改行

      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings_cms")

    • settings_cms.py

    from settings import *
    
    INSTALLED_APPS.remove('grappelli.dashboard')
    INSTALLED_APPS.remove('grappelli')
    STATIC_ROOT = os.path.join('/what/ever/static_cms/')
    STATIC_URL = '/static_cms/'
    ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/`
    
    • 修改settings.py:将INSTALLED_APPS从元组更改为列表

    • 重启网络服务器

    • ./manage.py collectstatic --settings=myproject.settings_cms

    • 您的常规站点将继续正常运行。要编辑禁用 grappelli 的 django-cms 页面,请转到 http://cms.example.com/admin/cms/page/

    【讨论】:

    • 这个解决方案是否会导致使用带有 grappelli 皮肤的 django-cms ?通常 grappelli 与 django-cms 一起工作,直到您开始编辑页面...
    • 不,如果我的回答不清楚,对不起。我的解决方案创建了 2 个域 - www.example.com 在管理员中使用 grappelli,而 cms.example.com 具有常规的 django 管理界面。由于 django-cms 的全部意义在于编辑页面,并且由于 grappelli 打破了这一点,我不同意“通常 grappelli 与 django-cms 一起使用”。
    【解决方案3】:

    我曾经制作了一个支持 grappelli 的 django-cms fork on github,它有点过时了,但也许可以帮助你入门或可能你想贡献。

    【讨论】:

    • 是否可以不 fork django-cms 而是创建独立的应用程序?
    • 当然是。我的意思是独立的,有点不同。例如,您不必 fork contrib.admin 即可使用 grappelli,对吗?粗略地说,它是在 contrib.admin 之上运行的独立应用程序。您可以在 INSTALLED_APPS 中拥有或不拥有它,而 contrib.admin 仍然有效。和 django 的方式,我想。所以我的问题是关于以这种方式构建应用程序。