跳转到主要内容

一个灵活、可扩展的CMS,具有自定义节点类型和灵活的区块内容。

项目描述

https://img.shields.io/travis/django-fluent/django-fluent-pages/master.svg?branch=master https://img.shields.io/pypi/v/django-fluent-pages.svg https://img.shields.io/pypi/l/django-fluent-pages.svg https://img.shields.io/codecov/c/github/django-fluent/django-fluent-pages/master.svg

django-fluent-pages

这是一个独立的模块,提供灵活、可扩展的CMS,具有自定义节点类型和灵活的区块内容。

功能

  • 完全可定制的页面层次结构。

  • 支持多语言网站。

  • 支持单个数据库中的多个网站。

  • 快速SEO友好的页面URL。

  • SEO优化(元关键词、描述、标题、301重定向、网站地图集成)。

  • 支持自定义页面类型的插件,

更多详情请参见Read The Docs上的文档

页面树定制

本模块提供了一个页面树,每个节点类型都可以是不同的模型。这使得您等开发者可以根据自己的需求来结构化您的站点树。例如:

  • 通过定义RstPage类型,构建RST页面的树结构。

  • 通过集成django-fluent-contents,构建基于小部件的页面树。

  • 构建“产品页面”,将所有产品作为子节点暴露出来。

  • 构建一个包含主页、子部分和文章节点、每个节点都有像专业CMS那样自定义字段的树。

每个节点类型都可以有自己的自定义字段、属性和渲染。

如果您正在构建一个自定义CMS,这个模块可能非常适合您,因为它提供了树结构,而不必关心其他任何事情。实际的页面内容是通过页面类型插件定义的。

安装

首先安装模块,最好在虚拟环境中进行

pip install django-fluent-pages

所有依赖项都将自动安装。

配置

您也可以使用现成的模板

mkdir my-website.com
cd my-website.com
django-admin.py startproject mywebsite . -e py,rst,example,gitignore --template=https://github.com/edoburu/django-project-template/archive/django-fluent.zip

或创建一个新项目

cd ..
django-admin.py startproject fluentdemo

要使用已集成的django-fluent-contents的标准设置,请使用

INSTALLED_APPS += (
    # The CMS apps
    'fluent_pages',

    # Required dependencies
    'mptt',
    'parler',
    'polymorphic',
    'polymorphic_tree',
    'slug_preview',

    # Optional widget pages via django-fluent-contents
    'fluent_pages.pagetypes.fluentpage',
    'fluent_contents',
    'fluent_contents.plugins.text',
    'django_wysiwyg',

    # Optional other CMS page types
    'fluent_pages.pagetypes.redirectnode',

    # enable the admin
    'django.contrib.admin',
)

DJANGO_WYSIWYG_FLAVOR = "yui_advanced"

请注意,每个CMS应用都是可选的。只有fluent_pagesmptt是必需的。其余的应用为系统添加了额外的功能。

urls.py

urlpatterns += patterns('',
    url(r'', include('fluent_pages.urls'))
)

之后可以创建数据库

./manage.py migrate
./manage.py runserver

自定义页面类型

本模块的关键特性是对自定义节点类型的支持。请查看fluent_pages.pagetypes中现有的类型,了解它是如何实现的。

这归结为创建一个包含两个文件的包

models.py文件中定义自定义节点类型及其任何字段

from django.db import models
from django.utils.translation import ugettext_lazy as _
from fluent_pages.models import HtmlPage
from mysite.settings import RST_TEMPLATE_CHOICES


class RstPage(HtmlPage):
    """
    A page that renders RST code.
    """
    rst_content = models.TextField(_("RST contents"))
    template = models.CharField(_("Template"), max_length=200, choices=RST_TEMPLATE_CHOICES)

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

一个page_type_plugins.py文件,用于定义元数据和渲染

from fluent_pages.extensions import PageTypePlugin, page_type_pool
from .models import RstPage


@page_type_pool.register
class RstPagePlugin(PageTypePlugin):
    model = RstPage
    sort_priority = 10

    def get_render_template(self, request, rstpage, **kwargs):
        return rstpage.template

一个模板可能看起来像这样

{% extends "base.html" %}
{% load markup %}

{% block headtitle %}{{ page.title }}{% endblock %}

{% block main %}
  <h1>{{ page.title }}</h1>

  <div id="content">
    {{ page.rst_content|restructuredtext }}
  </div>
{% endblock %}

就这样:用很少的代码就创建了一个自定义CMS。

可选地,还可以定义model_admin,以在编辑删除页面中具有自定义字段布局或额外功能。

插件配置

插件可以定义以下属性

  • model - 页面类型的模型

  • model_admin - 要使用的自定义管理员(必须继承自PageAdmin

  • render_template - 用于渲染的模板

  • response_class - 响应类(默认为TemplateResponse

  • is_file - 节点是否代表文件,并且不应以斜杠结尾。

  • can_have_children - 节点类型是否允许有子节点。

  • urls - 子页面的自定义URL模式集(可以是模块名称,或patterns()结果)。

  • sort_priority - 在“添加页面”对话框中的排序顺序。

它还可以覆盖以下函数

  • get_response(self, request, page, **kwargs) - 完全重新定义响应,而不是使用response_classrender_template等。

  • get_render_template(self, request, page, **kwargs) - 返回要渲染的模板,默认情况下这是render_template

  • get_context(self, request, page, **kwargs) - 返回节点的模板上下文。

有关这些属性的详细信息,请参阅文档

应用节点

如上所述,页面类型可以通过 urls 属性拥有自己的 URL 模式集。这允许实现“产品页面”等页面类型,在树结构中自动拥有所有数据库产品的子页面。这个 example 模块演示了这一概念。

URL 模式从页面的完整路径开始,因此它与 URLconf 中的常规 include() 类似。然而,页面类型可以被多次添加到树中。为了解析 URL,有 2 个函数可用

  • fluent_pages.urlresolvers.app_reverse() - 这个类似 reverse() 的函数定位与页面相关联的视图。

  • fluent_pages.urlresolvers.mixed_reverse() - 这个解析器首先尝试 app_reverse(),然后回退到标准的 reverse()

mixed_reverse() 对于第三方应用很有用,这些应用可以作为独立的(在正常的 URLconf 中挂载)运行,或者作为与 django-fluent-pages 结合使用的页面类型节点运行。这些功能也被 django-fluent-blogs 使用,以提供一个可以添加到树中任意位置的“博客”页面类型。

将页面添加到网站地图

可选地,页面可以包含在网站地图中。在 urls.py 中添加以下内容

from fluent_pages.sitemaps import PageSitemap

sitemaps = {
    'pages': PageSitemap,
}

urlpatterns += patterns('',
    url(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}),
)

贡献

此模块旨在通用。如果您对此有任何不满,或认为它不够灵活,请告诉我们。我们很乐意改进它!

如果您有任何其他有价值的贡献、建议或想法,也请告诉我们,因为我们会考虑这些。我们也欢迎拉取请求。:-)

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

sigmacms-fluent-pages-1.0.1.tar.gz (104.7 kB 查看哈希值)

上传时间

构建分发

sigmacms_fluent_pages-1.0.1-py2.py3-none-any.whl (197.1 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面