【问题标题】:How to use placeholders outside django-CMS?如何在 django-CMS 之外使用占位符?
【发布时间】:2020-11-18 03:13:07
【问题描述】:

我正在尝试在How to use placeholders outside the CMS 上实现关于 django-cms 的文档

似乎可以在 CMS 外部的模型应用程序中定义一个字段,其行为类似于 djangocms-text-ckeditor

但我无法让这个“模板标签”工作

{% extends 'base.html' %}
{% load cms_tags %}

{% block content %}
    <h1>Title page info</h1>
    {% render_placeholder object.short_text "640" %}
{% endblock content %}

这里是我的 info.models.py

from django.db import models
from cms.models.fields import PlaceholderField

class MsgDet(models.Model):
    title = models.CharField(max_length=255)
    short_text = PlaceholderField('content')

我使用django CMS installer 在 django-cms 教程之后创建了一个小型 django-cms 项目。源代码在 GitHub 上的 OpenHBP/PlaceholderField 下。我在 cms 中添加了一个简单的信息应用程序,并尝试在“CKEditor like”插件中显示“MsgDet.short_text”字段。

双击 CMS 主页会打开 CKeditor 窗口。我想在我的信息页面上获得相同的结果!

我知道这可以通过使用 ckeditor 中的 RichTextField 来实现,但我想使用“PlaceHolderFiled”来访问 djangoCMS 插件:图片/图像或文件。

请注意,我也尝试过使用 django-ckeditor-filebrowser-filer,但该项目似乎已被弃用并且 pdf 上传不起作用。

我只想能够从“CKEditor like”窗口访问文件管理器文件(图像和文档)...

【问题讨论】:

    标签: django plugins ckeditor django-cms


    【解决方案1】:

    现在可以了!

    我在settings.py 中添加了一个 CMS_PLACEHOLDER_CONF 字典,其中包含特定的“msgdet_slot”,其中包含默认文本'Lorem ipsum dolor sit amet...',以便它在页面上可见时连接到 CMS 并且当页面处于修改状态时:?在 URL 末尾编辑

    CMS_PLACEHOLDER_CONF = {
        None: {
            "plugins": ['TextPlugin'],
            'excluded_plugins': ['InheritPlugin'],
        },
        'msgdet_slot': {
            'plugins': ['TextPlugin', 'PicturePlugin', 'FilePlugin'],
            'text_only_plugins': ['LinkPlugin'],
            'extra_context': {"width":640},
            'name': "My slot",
            'language_fallback': True,
            'default_plugins': [
                {
                    'plugin_type': 'TextPlugin',
                    'values': {
                        'body':'<p>Lorem ipsum dolor sit amet...</p>',
                    },
                },
            ],
            'child_classes': {
                'TextPlugin': ['PicturePlugin', 'FilePlugin'],
            },
            'parent_classes': {
                'LinkPlugin': ['TextPlugin'],
            },
        },
    }
    

    models.py 因此必须修改

    from django.db import models
    from cms.models.fields import PlaceholderField
    
    class MsgDet(models.Model):
        title = models.CharField(max_length=255)
        short_text = PlaceholderField('msgdet_slot')
    

    最好使用您自己的插槽而不是 CMS 使用的通用“内容”,以便您可以修改要显示的 CMS 插件。在我的示例中,我只显示图片和文件插件。

    另请注意,如果某些页面已使用名为“myslot”的插槽进行编辑,并且您将其更改为“msgdet_slot”,则旧页面的配置(可见 CMS 插件)将保留为“myslot”。 File PlaceHolder 确实以唯一的 PK 存储在“cms_placeholder”表中。

    【讨论】:

      猜你喜欢
      • 2017-09-26
      • 2017-12-24
      • 2013-10-08
      • 2012-11-02
      • 2013-08-25
      • 2019-08-17
      • 2015-05-20
      • 2013-03-22
      • 2015-03-16
      相关资源
      最近更新 更多