All Projects → django-fluent → Django Fluent Pages

django-fluent / Django Fluent Pages

Licence: other
A flexible, scalable CMS with custom node types, and flexible block content.

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Django Fluent Pages

Django Phantom Theme
Phantom is theme for django admin with many widgets, based on Twitter bootstrap 3.x.
Stars: ✭ 18 (-82.52%)
Mutual labels:  django, django-admin
Django Suit Daterange Filter
Filter for django-admin allowing lookups by date range
Stars: ✭ 13 (-87.38%)
Mutual labels:  django, django-admin
Django Blogging System
This is blog system created using Django 1.11.4 and Python3
Stars: ✭ 11 (-89.32%)
Mutual labels:  django, django-admin
Django Pagedown
A django app that allows the easy addition of Stack Overflow's "PageDown" markdown editor to a django form field, whether in a custom app or the Django Admin
Stars: ✭ 500 (+385.44%)
Mutual labels:  django, django-admin
Awesome Django Cn
Django 优秀资源大全。
Stars: ✭ 1,153 (+1019.42%)
Mutual labels:  django, django-admin
Awesome Django
The Best Django Resource, Awesome Django for mature packages.
Stars: ✭ 591 (+473.79%)
Mutual labels:  django, django-admin
Requery
Store e run queries on database to help system manager of a Django website
Stars: ✭ 12 (-88.35%)
Mutual labels:  django, django-admin
Django Object Actions
A Django app for easily adding object tools in the Django admin
Stars: ✭ 374 (+263.11%)
Mutual labels:  django, django-admin
Django Polymorphic
Improved Django model inheritance with automatic downcasting
Stars: ✭ 1,135 (+1001.94%)
Mutual labels:  django, django-admin
Django Admin Numeric Filter
Numeric filters for Django admin
Stars: ✭ 46 (-55.34%)
Mutual labels:  django, django-admin
Django Ordered Model
Get your Django models in order
Stars: ✭ 476 (+362.14%)
Mutual labels:  django, django-admin
Awesome Django
Repository mirror of GitLab: https://gitlab.com/rosarior/awesome-django This repository is not monitored for issues, use original at GitLab.
Stars: ✭ 8,527 (+8178.64%)
Mutual labels:  django, django-admin
Django Nested Admin
Django admin classes that allow for nested inlines
Stars: ✭ 463 (+349.51%)
Mutual labels:  django, django-admin
Django Admin Bootstrap
Responsive Theme for Django Admin With Sidebar Menu
Stars: ✭ 787 (+664.08%)
Mutual labels:  django, django-admin
Django Flat Theme
A flat theme for Django admin interface. Modern, fresh, simple.
Stars: ✭ 415 (+302.91%)
Mutual labels:  django, django-admin
Django Oml
Object Moderation Layer
Stars: ✭ 12 (-88.35%)
Mutual labels:  django, django-admin
Awesome Django Admin
Curated List of Awesome Django Admin Panel Articles, Libraries/Packages, Books, Themes, Videos, Resources.
Stars: ✭ 356 (+245.63%)
Mutual labels:  django, django-admin
Django Cruds Adminlte
django-cruds is simple drop-in django app that creates CRUD for faster prototyping
Stars: ✭ 373 (+262.14%)
Mutual labels:  django, django-admin
E Commerce 2 django
Guest register, user register, user login, user logout, account home page, product view history, change password, reset password, change name, send activation email when register, resend activation email, add shipping address, add billing address, add nickname to the addresses, edit shipping address, edit billing address, view list of your addresses, reuse shipping addresses when order products, reuse billing addresses when ordeer products, show sales analytics if staff or admin only using -chart.js-, get analytics data with Ajax, receive marketing email, change if user will receive marketing email or not by admin, send contact message with Ajax, products list, product detail, download product detail as a PDF file, download digital product files -if the user purchased that digital product only-, orders list, list of digital products files, order detail, download order detail as a PDF file, verify order ownership with Ajax -to secure order detail page-, show cart products, add or remove product from cart, checkout page, thanks page when order placed successfully, add or reuse payment method, add or reuse payment method with Ajax, search products by title, search products by description, search products by price, search products by tag title, write tags for products -by admin only-, auto fill contact email, full name if user logged in.
Stars: ✭ 20 (-80.58%)
Mutual labels:  django, django-admin
Django Admin Material
A Django Admin interface based on Material Design by Google
Stars: ✭ 74 (-28.16%)
Mutual labels:  django, django-admin

.. image:: https://img.shields.io/travis/django-fluent/django-fluent-pages/master.svg?branch=master :target: http://travis-ci.org/django-fluent/django-fluent-pages .. image:: https://img.shields.io/pypi/v/django-fluent-pages.svg :target: https://pypi.python.org/pypi/django-fluent-pages/ .. image:: https://img.shields.io/pypi/l/django-fluent-pages.svg :target: https://pypi.python.org/pypi/django-fluent-pages/ .. image:: https://img.shields.io/codecov/c/github/django-fluent/django-fluent-pages/master.svg :target: https://codecov.io/github/django-fluent/django-fluent-pages?branch=master

django-fluent-pages

This is a stand-alone module, which provides a flexible, scalable CMS with custom node types, and flexible block content.

Features:

  • A fully customizable page hierarchy.

  • Support for multilingual websites.

  • Support for multiple websites in a single database.

  • Fast SEO-friendly page URLs.

  • SEO optimized (meta keywords, description, title, 301-redirects, sitemaps integration).

  • Plugin support for custom page types, which:

  • Integrate application logic in page trees.

  • Integrate advanced block editing (via as django-fluent-contents_).

For more details, see the documentation_ at Read The Docs.

Page tree customization

This module provides a page tree, where each node type can be a different model. This allows developers like yourself to structure your site tree as you see fit. For example:

  • Build a tree structure of RST pages, by defining a RstPage type.
  • Build a tree with widget-based pages, by integrating django-fluent-contents_.
  • Build a "product page", which exposes all products as sub nodes.
  • Build a tree of a homepage, subsection, and article node, each with custom fields like professional CMSes have.

Each node type can have it's own custom fields, attributes and rendering.

In case you're building a custom CMS, this module might just be suited for you, since it provides the tree for you, without bothering with anything else. The actual page contents is defined via page type plugins.

Installation

First install the module, preferably in a virtual environment:

.. code-block:: bash

pip install django-fluent-pages

All dependencies will be automatically installed.

Configuration

You can also use the ready-made template:

.. code-block:: bash

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

Or create a new project:

.. code-block:: bash

cd ..
django-admin.py startproject fluentdemo

To have a standard setup with django-fluent-contents_ integrated, use:

.. code-block:: python

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"

Note each CMS application is optional. Only fluent_pages and mptt are required. The remaining apps add additional functionality to the system.

In urls.py:

.. code-block:: python

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

The database can be created afterwards:

.. code-block:: bash

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

Custom page types

The key feature of this module is the support for custom node types. Take a look in the existing types at fluent_pages.pagetypes to see how it's being done.

It boils down to creating a package with 2 files:

The models.py file should define the custom node type, and any fields it has:

.. code-block:: python

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")

A page_type_plugins.py file that defines the metadata, and rendering:

.. code-block:: python

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

A template could look like:

.. code-block:: html+django

{% 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: with very little code a custom CMS was just created.

Optionally, a model_admin can also be defined, to have custom field layouts or extra functionality in the edit or delete page.

Plugin configuration


The plugin can define the following attributes:

* ``model`` - the model for the page type
* ``model_admin`` - the custom admin to use (must inherit from ``PageAdmin``)
* ``render_template`` - the template to use for rendering
* ``response_class`` - the response class (by default ``TemplateResponse``)
* ``is_file`` - whether the node represents a file, and shouldn't end with a slash.
* ``can_have_children`` - whether the node type is allowed to have child nodes.
* ``urls`` - a custom set of URL patterns for sub pages (either a module name, or ``patterns()`` result).
* ``sort_priority`` - a sorting order in the "add page" dialog.

It can also override the following functions:

* ``get_response(self, request, page, **kwargs)`` - completely redefine the response, instead of using ``response_class``, ``render_template``, etc..
* ``get_render_template(self, request, page, **kwargs)`` - return the template to render, by default this is ``render_template``.
* ``get_context(self, request, page, **kwargs)`` - return the template context for the node.

Details about these attributes is explained in the documentation_.


Application nodes
~~~~~~~~~~~~~~~~~

As briefly mentioned above, a page type can have it's own set of URL patterns, via the ``urls`` attribute.
This allows implementing page types such as a "product page" in the tree,
which automatically has all products from the database as sub pages.
The provides ``example`` module demonstrates this concept.

The URL patterns start at the full path of the page, so it works similar to a regular ``include()`` in the URLconf.
However, a page type may be added multiple times to the tree.
To resolve the URLs, there are 2 functions available:

* ``fluent_pages.urlresolvers.app_reverse()`` - this ``reverse()`` like function locates a view attached to a page.
* ``fluent_pages.urlresolvers.mixed_reverse()`` - this resolver tries ``app_reverse()`` first, and falls back to the standard ``reverse()``.

The ``mixed_reverse()`` is useful for third party applications which
can operate either stand-alone (mounted in the normal URLconf),
or operate as page type node in combination with *django-fluent-pages*.
These features are also used by django-fluent-blogs_ to provide a "Blog" page type
that can be added to a random point of the tree.


Adding pages to the sitemap
---------------------------

Optionally, the pages can be included in the sitemap.
Add the following in ``urls.py``:

.. code-block:: python

    from fluent_pages.sitemaps import PageSitemap

    sitemaps = {
        'pages': PageSitemap,
    }

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


Contributing
------------

This module is designed to be generic. In case there is anything you didn't like about it,
or think it's not flexible enough, please let us know. We'd love to improve it!

If you have any other valuable contribution, suggestion or idea,
please let us know as well because we will look into it.
Pull requests are welcome too. :-)


.. _documentation: https://django-fluent-pages.readthedocs.io/
.. _django.contrib.sites: https://docs.djangoproject.com/en/dev/ref/contrib/sites/
.. _django.contrib.sitemaps: https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/

.. _django-fluent-blogs: https://github.com/django-fluent/django-fluent-blogs
.. _django-fluent-contents: https://github.com/django-fluent/django-fluent-contents
.. _django-mptt: https://github.com/django-mptt/django-mptt
.. _django-parler: https://github.com/edoburu/django-parler
.. _django-polymorphic: https://github.com/django-polymorphic/django-polymorphic
.. _django-polymorphic-tree: https://github.com/django-polymorphic/django-polymorphic-tree

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].