自定义插件中的Django cms占位符字段,用于占位符,前端不可编辑
我在django 1.3上使用的是2.2 django cms,在django 1.4上使用的是2.3 django cms git repo,我注意到,如果在我的模型中包括一个占位符字段,例如:自定义插件中的Django cms占位符字段,用于占位符,前端不可编辑,django,django-templates,django-cms,Django,Django Templates,Django Cms,我在django 1.3上使用的是2.2 django cms,在django 1.4上使用的是2.3 django cms git repo,我注意到,如果在我的模型中包括一个占位符字段,例如: ##books/models.py class Book(models.Model): ... description = cmsmodels.PlaceholderField('book_description', null=True, blank=True) class Book
##books/models.py
class Book(models.Model):
...
description = cmsmodels.PlaceholderField('book_description', null=True, blank=True)
class BookCMSPluginModelItem(models.Model):
t_book = models.ForeignKey(Book)
...
class BookCMSPluginModel(CMSPlugin):
featured_books = models.ManyToManyField(BookCMSPluginModelItem)
template = models.CharField(max_length=256, choices= settings.BOOKS_TEMPLATES, default=settings.BOOKS_TEMPLATES[0]);
让我的CMS插件如下:
##books/cms_plugins.py
class BookCMSPlugin(CMSPluginBase):
model = BookCMSPluginModel
name = _("Books Plugin")
def render(self, context, instance, placeholder):
self.render_template = instance.template;
context['instance'] = instance;
return context
然后在我的模板中,我发现我可以做到以下几点:
{% for mitem in instance.featured_books.all %}
<!-- ...... -->
<div>{% render_placeholder mitem.t_book.description %}</div>
{% endfor %}
但是,在前端编辑器中,我添加了我的新插件,并且描述字段确实显示为占位符,但是当我将鼠标悬停在它上面时,我放置插件的外部占位符处于活动状态,我无法直接选择内部占位符。它在管理站点中运行得很好,因为我可以使用SemanticEditor和任何我想使用的东西添加内容。然而,在前端,javascript有一个令人沮丧的问题,它似乎阻止用户添加或编辑内部占位符
我应该注意到,我在这里遵循了精彩的django cms文档:,但该站点仅在特定设计的页面中显示模型的上下文中解决了这个问题,不幸的是,没有为自定义django cms插件使用模板
谢谢
django cms开发人员之一的Zak说,django cms 2.2的插件架构中没有插件
我已经在最新的开发部门试用过了,现在已经可以使用了。同样的问题
Django==3.1.6
django-cms==3.8.0
python_version = 3.6.9
一个不值得推荐的解决方法是在1个位置更改cms源代码
转到virtualenvs/您的项目vitualenv/lib/python3.6/site-packages/cms/models
然后编辑文件占位符模型
转到第123行占位符。具有更改权限并在返回时注释第一个占位符
=>注释行132(如果未附加)\u型号:
=>第136行返回user.is_superuser
保存并重新启动服务器
def拥有更改权限,用户:
如果用户有权限,则返回True
更改附加到此占位符的所有模型。
从cms.utils.permissions导入获取\u模型\u权限\u代码名
附加的\u模型=自身。\u获取\u附加的\u模型
评论这部分!
如果未随附以下型号:
从技术上讲,如果占位符未附加到任何内容,
用户不能更改它,但如果是超级用户
那么我们应该允许它。
return user.is_superuser
附着的对象=自身。获取附着的对象
对于附着的对象中的obj:
尝试:
perm=obj.has\u占位符\u更改\u权限用户
除属性错误外:
型号=类型OBJ
change\u perm=get\u model\u permission\u codenamemodel,“change”
perm=user.has\u permchange\u perm
如果不烫发:
返回错误
返回真值
django cms 3.0.0beta2也有同样的问题。您找到解决方案了吗?3.0.6的相同问题似乎仍然是3.1.0的问题