我在现有的Django 1.7 / Python 2.7项目的基础上安装了django-cms 3.0.6(截至今天的最新版本),并以sqlite3作为db。
创建了一个简单的模板和占位符后,尝试使用前端内容编辑器添加插件时出错(例如“Generic / Picture”插件)。这是我的模板文件:
{% extends "base.html" %}
{% load cms_tags %}
{% block content %}
{% placeholder template1_content %}
{% endblock %}
即使我以超级用户身份登录,当我尝试添加插件时,弹出窗口显示“您没有权限添加插件”。
除了无法添加插件之外,关于django-cms界面的所有其他内容似乎都运行良好 - 我可以查看管理员,创建页面,在实时和草稿之间切换等。
我查看了django-cms代码,看来错误来自cms.admin.pageadmin.PageAdmin类中的publisher_is_draft检查:
def has_add_plugin_permissions(self, request, placeholder, plugin_type):
...
...
if page and not page.publisher_is_draft:
return False
return True
基本上,似乎django-cms不认为页面处于草稿模式,即使我已根据前端输入“草稿模式”(即:将“实时”模式图标切换为“草稿”)。上述函数传递中的另一个检查确认错误不是用户权限问题(事实上,正如我上面提到的,错误发生在超级用户身上),而是关于页面状态。
这只是将django-cms 3.0.6与Django 1.7集成的问题,还是我错过了一些明显的东西?有任何想法吗?
答案 0 :(得分:1)
经过一番挖掘后,我将问题缩小到我的settings.py文件。在MIDDLEWARE_CLASSES中,我最初有一个'django.contrib.sessions.middleware.SessionMiddleware'的重复条目(参见第一行和最后一行):
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.common.CommonMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
)
正确的配置是:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.doc.XViewMiddleware',
'django.middleware.common.CommonMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.language.LanguageCookieMiddleware',
)
删除此重复行后,重新启动服务器并注销/退出(可能是为了刷新会话),问题就消失了。另一方面,在恢复重复行,重新启动服务器并注销后,问题又返回了。
不幸的是,我不明白为什么重复的行会导致问题 - 但是在这个阶段,我可以在另一个时间推迟这样的理解。
鉴于重复的行似乎会导致问题(并且调试这些问题可能相当费时),如果Django在存在此类错误配置的情况下抛出错误将会很好。
答案 1 :(得分:0)
如果我尝试在作为应用实例的网页上添加或调整插件或模板,我就会遇到权限问题。
例如,如果您尝试从博客的前端更改某些内容,如果您在博客条目中获得了许可,那么您必须在博客上#39;无论您的状态如何,都可以进行任何更改。
这与在app 下运行的多个页面看起来这样的事实有关,就像它们分开页面一样,但是在引擎盖下它们是同一页面的所有变体,并给出了虚拟URL。
我想一个解决方法 - 在博客应用程序的情况下 - 让某个类似画廊的东西只出现在父页面的特定子节点上,就是将插件添加到父页面,在那里它可以在所有子页面上都是可选的,但您只是在99%的时间内忽略它,它不会影响您不想要的页面。