首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在夹层现有项目中实现django-fluent内容

如何在夹层现有项目中实现django-fluent内容
EN

Stack Overflow用户
提问于 2015-12-09 09:49:17
回答 1查看 414关注 0票数 3

我有现有的夹层项目与现有的网页。可以实现到AdminPage的fluent内容功能而没有流畅的页面功能吗?只是想要夹层网页的创建,因为它是,但与流畅的内容在其中。这有可能实现吗?有谁能给出如何将它实现到夹层AdminPage的例子吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-03 14:19:59

因为没有人有这个问题,我已经解决了,并成功地实现了现有的夹层项目的Fluent内容。这是非常简单的,但调查采取编辑核心来源的夹层cms。毕竟,输出解决方案是一个简单的应用程序,可以像在管理或客户端那样扩展夹层页面。

(难点:中等/专家)

解决方案:

(在这个例子中,我使用了名为“cms_coremodul”的应用程序) PS:它是用ver制作的。Python3.4与虚拟环境。

夹层设置和安装:

夹层4.0.1的-version

-install流畅-内容与所需的插件,你需要(跟随内容流畅的文档)。

代码语言:javascript
复制
pip install django-fluent-contents

-also,您可以选择安装powerfull。

代码语言:javascript
复制
pip install django-ckeditor

-after --您已经安装好了--让我们开始安装settings.py并将所有东西迁移到上面。

settings.py

-流利-内容必须高于您的应用程序和下面的夹层应用程序。

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    "fluent_contents",
    "django_wysiwyg",
    "ckeditor",
    # all working fluent-contents plugins
    'fluent_contents.plugins.text',                # requires django-wysiwyg
    'fluent_contents.plugins.code',                # requires pygments
    'fluent_contents.plugins.gist',
    'fluent_contents.plugins.iframe',
    'fluent_contents.plugins.markup',
    'fluent_contents.plugins.rawhtml',
    'fluent_contents.plugins.picture',
    'fluent_contents.plugins.oembeditem',
    'fluent_contents.plugins.sharedcontent',
    'fluent_contents.plugins.googledocsviewer',
    ...
    'here_will_be_your_app',
)

-settings for django-ckeditor:

settings.py

代码语言:javascript
复制
# CORE MODUL DEFAULT WYSIWYG EDITOR SETUP
RICHTEXT_WIDGET_CLASS = "ckeditor.widgets.CKEditorWidget"
RICHTEXT_FILTER_LEVEL = 3
DJANGO_WYSIWYG_FLAVOR = "ckeditor"

# CKEditor config
CKEDITOR_CONFIGS = {
    'awesome_ckeditor': {
        'toolbar': 'Full',
    },
    'default': {
        'toolbar': 'Standard',
        'width': '100%',
    },         
}

fluent- settings.py的settings.py设置是完整的,让我们将所有内容迁移到:

代码语言:javascript
复制
python manage.py migrate

-if关于fluent内容的依赖关系会出现任何错误/错误,请安装该依赖项并再次迁移.

为FLUENT内容创建新应用程序:

  • 在夹层项目中创建一个新的应用程序(与Django相同): python manage.py startapp nameofyourapp

models.py

代码语言:javascript
复制
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from mezzanine.pages.models import Page
from django.utils.translation import ugettext_lazy as _
from fluent_contents.models import PlaceholderRelation, ContentItemRelation
from mezzanine.core.fields import FileField
from . import appconfig

class CoreModulPage(Page):

    template_name = models.CharField("Template choice", max_length=255, choices=appconfig.TEMPLATE_CHOICES, default=appconfig.COREMODUL_DEFAULT_TEMPLATE)

    # Accessing the data of django-fluent-contents
    placeholder_set = PlaceholderRelation()
    contentitem_set = ContentItemRelation()

    class Meta:
        verbose_name = _("Core page")
        verbose_name_plural = _("Core pages")

admin.py

代码语言:javascript
复制
from django.contrib import admin
from django.http.response import HttpResponse
from mezzanine.pages.admin import PageAdmin

import json

# CORE MODUL IMPORT
from fluent_contents.admin import PlaceholderEditorAdmin
from fluent_contents.analyzer import get_template_placeholder_data
from django.template.loader import get_template
from .models import CoreModulPage
from . import appconfig
from fluent_contents.admin.placeholdereditor import PlaceholderEditorInline

class CoreModulAdmin(PlaceholderEditorAdmin, PageAdmin):

    #################################
    #CORE MODUL - PAGE LOGIC
    #################################
    corepage = CoreModulPage.objects.all()
    # CORE FLUENT-CONTENTS
    # This is where the magic happens.
    # Tell the base class which tabs to create
    def get_placeholder_data(self, request, obj):
        # Tell the base class which tabs to create
        template = self.get_page_template(obj)
        return get_template_placeholder_data(template)

    def get_page_template(self, obj):
        # Simple example that uses the template selected for the page.
        if not obj:
            return get_template(appconfig.COREMODUL_DEFAULT_TEMPLATE)
        else:
            return get_template(obj.template_name or appconfig.COREMODUL_DEFAULT_TEMPLATE)

    # Allow template layout changes in the client,
    # showing more power of the JavaScript engine.

    # THIS LINES ARE OPTIONAL
    # It sets your own path to admin templates and static of fluent-contents
    #
    # START OPTIONAL LINES
    # this "PlaceholderEditorInline.template" is in templates folder of your app
    PlaceholderEditorInline.template = "cms_plugins/cms_coremodul/admin/placeholder/inline_tabs.html"
    # this "PlaceholderEditorInline.Media.js"
    # and "PlaceholderEditorInline.Media.css" is in static folder of your app
    PlaceholderEditorInline.Media.js = (
            'cms_plugins/cms_coremodul/admin/js/jquery.cookie.js',
            'cms_plugins/cms_coremodul/admin/js/cp_admin.js',
            'cms_plugins/cms_coremodul/admin/js/cp_data.js',
            'cms_plugins/cms_coremodul/admin/js/cp_tabs.js',
            'cms_plugins/cms_coremodul/admin/js/cp_plugins.js',
            'cms_plugins/cms_coremodul/admin/js/cp_widgets.js',
            'cms_plugins/cms_coremodul/admin/js/fluent_contents.js',
        )

    PlaceholderEditorInline.Media.css = {
            'screen': (
                'cms_plugins/cms_coremodul/admin/css/cp_admin.css',
            ),
        }

    PlaceholderEditorInline.extend = False   # No need for the standard 'admin/js/inlines.min.js' here.
    #
    # END OPTIONAL LINES

    # template to change rendering template for contents (combobox in page to choose desired template to render)
    change_form_template = "cms_plugins/cms_coremodul/admin/page/change_form.html"

    class Media:
        js = (
            'cms_plugins/cms_coremodul/admin/js/coremodul_layouts.js',
        )



    def get_layout_view(self, request):
        """
        Return the metadata about a layout
        """
        template_name = request.GET['name']

        # Check if template is allowed, avoid parsing random templates
        templates = dict(appconfig.TEMPLATE_CHOICES)
        if not templates.has_key(template_name):
            jsondata = {'success': False, 'error': 'Template was not found!'}
            status = 404
        else:
            # Extract placeholders from the template, and pass to the client.
            template = get_template(template_name)
            placeholders = get_template_placeholder_data(template)

            jsondata = {
                'placeholders': [p.as_dict() for p in placeholders],
            }
            status = 200

        jsonstr = json.dumps(jsondata)
        return HttpResponse(jsonstr, content_type='application/json', status=status)


admin.site.register(CoreModulPage, CoreModulAdmin)

appconfig.py

-you必须在应用程序中创建新的appconfig.py文件。

代码语言:javascript
复制
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured


TEMPLATE_CHOICES = getattr(settings, "TEMPLATE_CHOICES", ())
COREMODUL_DEFAULT_TEMPLATE = getattr(settings, "COREMODUL_DEFAULT_TEMPLATE", TEMPLATE_CHOICES[0][0] if TEMPLATE_CHOICES else None)


if not TEMPLATE_CHOICES:
    raise ImproperlyConfigured("Value of variable 'TEMPLATE_CHOICES' is not set!")

if not COREMODUL_DEFAULT_TEMPLATE:
    raise ImproperlyConfigured("Value of variable 'COREMODUL_DEFAULT_TEMPLATE' is not set!")

settings.py :-this行添加到您的夹层项目的settings.py中。

代码语言:javascript
复制
# CORE MODUL TEMPLATE LIST
TEMPLATE_CHOICES = (
    ("pages/coremodulpage.html", "CoreModulPage"),
    ("pages/coremodulpagetwo.html", "CoreModulPage2"),
)

# CORE MODUL default template setup (if drop-down not exist in admin interface)
COREMODUL_DEFAULT_TEMPLATE = TEMPLATE_CHOICES[0][0]

-append您的应用程序到INSTALLED_APPS (将您的应用程序添加到INSTALLED_APPS)。

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    "yourappname_with_fluentcontents",
)

为应用程序的内容创建模板:

带有一个占位符的-template:

coremodulpage.html:

代码语言:javascript
复制
{% extends "pages/page.html" %}
{% load mezzanine_tags fluent_contents_tags %}

{% block main %}{{ block.super }}
{% page_placeholder page.coremodulpage "main" role='m' %}
{% endblock %}

带有两个占位符的-template (一个除外):

代码语言:javascript
复制
{% extends "pages/page.html" %}
{% load mezzanine_tags fluent_contents_tags %}

{% block main %}{{ block.super }}
{% page_placeholder page.coremodulpage "main" role='m' %}
<aside>
    {% page_placeholder page.coremodulpage "sidepanel" role='s' %}
</aside>
{% endblock %}

-after您的应用程序是安装程序,让我们进行迁移:

-1.对应用程序进行迁移:

代码语言:javascript
复制
python manage.py makemigrations yourappname

-2.将应用程序迁移到数据库:

代码语言:javascript
复制
python manage.py migrate

终于完成了!-尝试您的新类型的管理网页与流利的内容插件安装.-在下拉列表中,在Admin中键入Page,选择核心页。如果您创建了用于呈现fluent-contents选项卡的模板,其中包含占位符,并在其中显示下拉列表。现在,您可以选择所需的插件,并创建您的模块化内容的网页。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34175576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档