djangocms_blog/README.rst

289 lines
12 KiB
ReStructuredText
Raw Normal View History

2014-02-25 13:46:50 +00:00
==============
2014-01-05 09:34:10 +00:00
djangocms-blog
2014-02-25 13:46:50 +00:00
==============
2014-01-05 09:34:10 +00:00
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/pypi/v/djangocms-blog.svg?style=flat-square
:target: https://pypi.python.org/pypi/djangocms-blog
:alt: Latest PyPI version
2014-08-29 03:59:12 +00:00
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/pypi/dm/djangocms-blog.svg?style=flat-square
:target: https://pypi.python.org/pypi/djangocms-blog
:alt: Monthly downloads
2015-02-08 21:46:28 +00:00
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/pypi/pyversions/djangocms-blog.svg?style=flat-square
:target: https://pypi.python.org/pypi/djangocms-blog
:alt: Python versions
2014-06-11 11:05:41 +00:00
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/travis/nephila/djangocms-blog.svg?style=flat-square
:target: https://travis-ci.org/nephila/djangocms-blog
:alt: Latest Travis CI build status
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/coveralls/nephila/djangocms-blog/master.svg?style=flat-square
:target: https://coveralls.io/r/nephila/djangocms-blog?branch=master
:alt: Test coverage
2014-01-05 09:34:10 +00:00
2015-10-17 13:55:54 +00:00
.. image:: https://img.shields.io/codecov/c/github/nephila/djangocms-blog/master.svg?style=flat-square
:target: https://codecov.io/github/nephila/djangocms-blog
:alt: Test coverage
.. image:: https://codeclimate.com/github/nephila/djangocms-blog/badges/gpa.svg?style=flat-square
2015-09-01 08:35:54 +00:00
:target: https://codeclimate.com/github/nephila/djangocms-blog
:alt: Code Climate
2014-02-25 13:46:50 +00:00
A djangoCMS 3 blog application.
Supported Django versions:
* Django 1.6
2014-12-05 20:17:27 +00:00
* Django 1.7
2015-07-21 06:27:49 +00:00
* Django 1.8
Supported django CMS versions:
2015-05-18 06:35:17 +00:00
* django CMS 3.x
2015-08-14 17:22:00 +00:00
.. warning:: Version 0.6 changes the field of LatestPostsPlugin.tags field.
A datamigration is in place to migrate the data, but check that
works ok for your project before upgrading, as this might delete
some relevant data.
2014-12-05 14:52:37 +00:00
.. warning:: Starting from version 0.5, this package does not declare dependency
on South anymore; please install it separately if using this
application on Django 1.6.
2014-12-05 20:17:27 +00:00
2014-12-05 14:52:37 +00:00
2014-01-05 09:34:10 +00:00
Quickstart
----------
Install djangocms-blog::
2014-09-27 09:04:49 +00:00
pip install djangocms-blog
2014-01-05 09:34:10 +00:00
2014-03-06 19:09:37 +00:00
Add ``djangocms_blog`` and its dependencies to INSTALLED_APPS::
2014-01-05 09:34:10 +00:00
2014-03-06 19:09:37 +00:00
INSTALLED_APPS = [
...
'filer',
2014-08-19 17:28:09 +00:00
'easy_thumbnails',
'cmsplugin_filer_image',
2014-03-06 19:09:37 +00:00
'parler',
'taggit',
'taggit_autosuggest',
2014-06-12 16:23:24 +00:00
'meta',
'meta_mixin',
2014-07-21 10:24:27 +00:00
'admin_enhancer',
2014-08-19 17:28:09 +00:00
'djangocms_blog',
2014-03-06 19:09:37 +00:00
...
]
Then sync and migrate::
$ python manage.py syncdb
$ python manage.py migrate
2014-06-12 16:23:24 +00:00
External applications configuration
+++++++++++++++++++++++++++++++++++
Dependency applications may need configuration to work properly.
Please, refer to each application documentation on details.
* django-filer: http://django-filer.readthedocs.org
* django-meta: https://github.com/nephila/django-meta#installation
2014-08-24 04:34:34 +00:00
* django-parler: http://django-parler.readthedocs.org/en/latest/quickstart.html#configuration
2014-06-12 16:23:24 +00:00
* django-taggit-autosuggest: https://bitbucket.org/fabian/django-taggit-autosuggest
Quick hint
++++++++++
The following are minimal defaults to get the blog running; they may not be
suited for your deployment.
2015-10-01 06:15:37 +00:00
* Add the following settings to your project::
2014-06-12 16:23:24 +00:00
SOUTH_MIGRATION_MODULES = {
2014-06-20 11:14:06 +00:00
'easy_thumbnails': 'easy_thumbnails.south_migrations',
2014-06-12 16:23:24 +00:00
'taggit': 'taggit.south_migrations',
}
THUMBNAIL_PROCESSORS = (
'easy_thumbnails.processors.colorspace',
'easy_thumbnails.processors.autocrop',
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
'easy_thumbnails.processors.filters',
)
META_SITE_PROTOCOL = 'http'
META_USE_SITES = True
2015-10-01 06:15:37 +00:00
2015-07-21 06:27:49 +00:00
* If you are using Django 1.7+, be aware than ``filer`` < 0.9.10, ``cmsplugin_filer``
2015-06-11 16:00:12 +00:00
and ``django-cms`` < 3.1 currently requires you to setup ``MIGRATION_MODULES`` in settings::
2015-10-01 06:15:37 +00:00
2015-03-02 06:10:55 +00:00
MIGRATION_MODULES = {
2015-06-11 16:00:12 +00:00
'cms': 'cms.migrations_django', # only for django CMS 3.0
'menus': 'menus.migrations_django', # only for django CMS 3.0
'filer': 'filer.migrations_django', # only for django filer 0.9.9 and below
2015-03-02 06:10:55 +00:00
'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django',
}
2015-10-01 06:15:37 +00:00
2015-03-02 06:17:41 +00:00
Please check
`django CMS installation <http://django-cms.readthedocs.org/en/support-3.0.x/how_to/integrate.html#installing-and-configuring-django-cms-in-your-django-project>`_,
`cmsplugin-filer README <https://github.com/stefanfoulis/cmsplugin-filer#installation>`_
2015-03-02 06:17:02 +00:00
for detailed information.
2014-06-12 16:23:24 +00:00
2014-08-24 04:34:34 +00:00
* Configure parler according to your languages::
PARLER_LANGUAGES = {
1: (
{'code': 'en',},
{'code': 'it',},
{'code': 'fr',},
),
}
* Add the following to your ``urls.py``::
2014-06-12 16:23:24 +00:00
2014-06-20 10:53:54 +00:00
url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
2014-06-12 16:23:24 +00:00
2015-10-01 06:15:37 +00:00
* To start your blog you need to use `AppHooks from django CMS <http://django-cms.readthedocs.org/en/support-3.0.x/how_to/apphooks.html>`_
2015-02-20 20:51:00 +00:00
to add the blog to a django CMS page:
2015-10-01 06:15:37 +00:00
2014-08-24 10:08:45 +00:00
* Create a new django CMS page
* Go to Advanced settings and select Blog from the Application selector;
2014-08-24 10:08:45 +00:00
* Eventually customise the Application instance name;
2015-07-21 14:03:14 +00:00
* Publish the page
2014-08-24 10:08:45 +00:00
* Restart the project instance to properly load blog urls.
2015-02-20 20:51:00 +00:00
* Add and edit blog by creating them in the admin or using the toolbar,
and the use the `django CMS frontend editor <http://django-cms.readthedocs.org/en/support-3.0.x/user/reference/page_admin.html#the-interface>`_
to edit the blog content:
2015-10-01 06:15:37 +00:00
2015-02-20 20:51:00 +00:00
* Create a new blog entry in django admin backend or from the toolbar
* Click on "view on site" button to view the post detail page
* Edit the post via djangocms frontend by adding / editing plugins
* Publish the blog post by flagging the "Publish" switch in the blog post admin
2014-08-29 04:01:10 +00:00
2015-10-01 06:15:37 +00:00
Configurable permalinks
+++++++++++++++++++++++
Blog comes with four different styles of permalinks styles:
* Full date: ``YYYY/MM/DD/SLUG``
* Year / Month: ``YYYY/MM/SLUG``
* Category: ``CATEGORY/SLUG``
* Just slug: ``SLUG``
As all the styles are loaded in the urlconf, the latter two does not allow to have CMS pages
beneath the page the blog is attached to. If you want to do this, you have to override the default
urlconfs by setting somethik like the following in the project settings::
2015-10-01 06:56:15 +00:00
BLOG_PERMALINK_URLS = {
2015-10-01 06:15:37 +00:00
'full_date': r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<slug>\w[-\w]*)/$',
'short_date': r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<slug>\w[-\w]*)/$',
'category': r'^post/(?P<category>\w[-\w]*)/(?P<slug>\w[-\w]*)/$',
'slug': r'^post/(?P<slug>\w[-\w]*)/$',
}
And change ``post/`` with the desired prefix.
Templates
+++++++++
To ease the template customisations a ``djangocms_blog/base.html`` template is used by all the blog templates;
the templates itself extends a ``base.html`` template; content is pulled in the ``content`` block.
If you need to define a different base template, or if your base template does not defines a ``content`` block,
copy in your template directory ``djangocms_blog/base.html`` and customise it according to your
needs; the other application templates will use the newly created template and will ignore the bundled one.
2014-01-05 09:34:10 +00:00
Features
--------
2014-03-06 19:09:37 +00:00
* Placeholder content editing
* Frontend editing using django CMS 3.0 frontend editor
* Multilingual support using django-parler
2014-04-26 07:01:23 +00:00
* Support for Twitter cards, Open Graph and Google+ snippets meta tags
* Optional support for simpler TextField-based content editing
2014-10-04 17:27:53 +00:00
* Multisite support (posts can be visible in one or more Django sites on the same project)
2015-08-22 20:35:30 +00:00
* Per-apphook configuration
2014-04-26 07:01:23 +00:00
Import from Wordpress
+++++++++++++++++++++
If you want to import content from existing wordpress blog, check
https://pypi.python.org/pypi/the-real-django-wordpress and
this gist https://gist.github.com/yakky/11336204 as a base.
2014-04-26 07:01:23 +00:00
2015-08-22 20:35:30 +00:00
Global Settings
---------------
2014-04-26 07:01:23 +00:00
* BLOG_IMAGE_THUMBNAIL_SIZE: Size of the main image when shown on the post lists;
2014-10-11 10:46:39 +00:00
it's a dictionary with ``size``, ``crop`` and ``upscale`` keys;
(default: ``{'size': '120x120', 'crop': True,'upscale': False}``)
2014-04-26 07:01:23 +00:00
* BLOG_IMAGE_FULL_SIZE: Size of the main image when shown on the post detail;
2014-10-11 10:46:39 +00:00
it's a dictionary with ``size``, ``crop`` and ``upscale`` keys;
(default: ``{'size': '640x120', 'crop': True,'upscale': False}``)
2014-10-04 17:27:53 +00:00
* BLOG_PAGINATION: Number of post per page; (default: 10)
* BLOG_LATEST_POSTS: Default number of post in the **Latest post** plugin; (default: 5)
2014-04-26 07:01:23 +00:00
* BLOG_POSTS_LIST_TRUNCWORDS_COUNT: Default number of words shown for abstract in the post list; (default: 100)
* BLOG_TYPE: Generic type for the post object; (default: Article)
2015-08-22 20:35:30 +00:00
* BLOG_TYPES: Choices of available blog types; (default: Article, Website)
2014-04-26 07:01:23 +00:00
* BLOG_FB_TYPE: Open Graph type for the post object; (default: Article)
2015-08-22 20:35:30 +00:00
* BLOG_FB_TYPES: Choices of available blog types; (default: Article, Website)
2014-04-26 07:01:23 +00:00
* BLOG_FB_APPID: Facebook Application ID
* BLOG_FB_PROFILE_ID: Facebook profile ID of the post author
* BLOG_FB_PUBLISHER: Facebook URL of the blog publisher
* BLOG_FB_AUTHOR_URL: Facebook profile URL of the post author
* BLOG_FB_AUTHOR: Facebook profile URL of the post author
* BLOG_TWITTER_TYPE: Twitter Card type for the post object; (default: Summary)
2015-08-22 20:35:30 +00:00
* BLOG_TWITTER_TYPES: Choices of available blog types for twitter; (default: Article, Website)
2014-04-26 07:01:23 +00:00
* BLOG_TWITTER_SITE: Twitter account of the site
* BLOG_TWITTER_AUTHOR: Twitter account of the post author
* BLOG_GPLUS_TYPE: Google+ Snippet type for the post object; (default: Blog)
2015-08-22 20:35:30 +00:00
* BLOG_GPLUS_TYPES: Choices of available blog types for twitter; (default: Article, Website)
2014-04-26 07:01:23 +00:00
* BLOG_GPLUS_AUTHOR: Google+ account of the post author
2015-08-22 20:35:30 +00:00
* BLOG_ENABLE_COMMENTS: Whether to enable comments by default on posts;
while ``djangocms_blog`` does not ship any comment system, this flag can be used
to control the chosen comments framework; (default: True)
* BLOG_USE_ABSTRACT: Use an abstract field for the post; if ``False`` no abstract field
is available for every post; (default: True)
* BLOG_USE_PLACEHOLDER: Post content is managed via placeholder; if ``False`` a
simple HTMLField is used; (default: True)
* BLOG_MULTISITE: Add support for multisite setup
* BLOG_MENU_TYPE: Structure of the Blog menu; (default: Posts and Categories)
* BLOG_AUTHOR_DEFAULT: Use a default if not specified; if set to ``True`` the
current user is set as the default author, if set to ``False`` no default
author is set, if set to a string the user with the provided username is
used; (default: True)
* BLOG_DEFAULT_PUBLISHED: If posts are marked as published by default; (default: False)
* BLOG_AVAILABLE_PERMALINK_STYLES: Choices of permalinks styles;
* BLOG_PERMALINK_URLS: URLConf corresponding to BLOG_AVAILABLE_PERMALINK_STYLES;
Per-Apphook settings
--------------------
* default_published: Per-apphook setting for BLOG_DEFAULT_PUBLISHED;
* Permalink structure: Per-apphook setting for BLOG_AVAILABLE_PERMALINK_STYLES;
* Use placeholder and plugins for article body: Per-apphook setting for BLOG_USE_PLACEHOLDER;
* Use abstract field: Per-apphook setting for BLOG_USE_ABSTRACT;
* Set author: Per-apphook setting for BLOG_AUTHOR_DEFAULT;
* Paginate sizePer-apphook setting for BLOG_PAGINATION;
* Template prefix: Alternative directory to load the blog templates from;
* Menu structure: Per-apphook setting for BLOG_MENU_TYPE
* Object type:Per-apphook setting for BLOG_TYPE
* Facebook type: Per-apphook setting for BLOG_FB_TYPE
* Facebook application ID: Per-apphook setting for BLOG_FB_APP_ID
* Facebook profile ID: Per-apphook setting for BLOG_FB_PROFILE_ID
* Facebook page URL: Per-apphook setting for BLOG_FB_PUBLISHER
* Facebook author URL: Per-apphook setting for BLOG_AUTHOR_URL
* Facebook author: Per-apphook setting for BLOG_AUTHOR
* Twitter type: Per-apphook setting for BLOG_TWITTER_TYPE
* Twitter site handle: Per-apphook setting for BLOG_TWITTER_SITE
* Twitter author handle: Per-apphook setting for BLOG_TWITTER_AUTHOR
* Google+ type: Per-apphook setting for BLOG_GPLUS_TYPE
* Google+ author name: Per-apphook setting for BLOG_GPLUS_AUTHOR
2014-01-06 09:37:55 +00:00
2015-03-02 06:08:59 +00:00
Known djangocms-blog websites
+++++++++++++++++++++++++++++
2015-03-02 06:17:02 +00:00
* http://nephila.co.uk/blog
* https://blog.ungleich.ch/