跳转到主要内容

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

项目描述

该项目作为CMS框架的开发已结束。 它只接受低维护以继续运行现有网站。 请自由浏览代码,但请在使用其他基于Django的CMS框架,如 Wagtail CMS 开始新项目时使用。

django-fluent-pages

No Maintenance Intended https://github.com/django-fluent/django-fluent-pages/actions/workflows/tests.yaml/badge.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 https://readthedocs.org/projects/django-fluent-pages/badge/?version=latest

这是一个独立模块,提供灵活、可扩展的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中,了解它是如何实现的。

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

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 %}

Et, voila:用非常少的代码就创建了一个自定义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}),
)

贡献

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

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

项目详情


下载文件

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

源分布

django-fluent-pages-3.0.2.tar.gz (349.4 kB 查看散列)

上传时间

构建分布

django_fluent_pages-3.0.2-py3-none-any.whl (142.7 kB 查看哈希值)

上传时间 Python 3

由以下支持