Compare commits

..
19 Commits
Author SHA1 Message Date
Angelo Dini 006367b678 Fixes test suite (#6688)
* add information for testing

* fix tests

* updated CHANGELOG

* update

* 1.8.5

* fix tests locally

* update text
2019-06-07 11:02:11 +02:00
Bartosz Płóciennik b810dd4417 Adding support for Django 2.2 LTS (#6655)
* New changes for cms 3.7

* Fix typo

* Fixed issue with force_color

* Removed unused import

* Added docs to index.rst

* Fixed travis jobs

* Fixed force_color command

* Changes after review

* Fixed django version in setup

* Update django-2.2.txt
2019-06-06 10:08:20 +02:00
Craig Anderson 15267a5ddf Add missing parenthesis in code (#6677) 2019-05-28 15:25:18 +02:00
Bartosz Płóciennik eeb1e4712b Restored Django flags in compat file (#6636) 2019-03-19 14:45:07 +01:00
Bartosz Płóciennik c973e9720e Fixed #6615 -- Removed depreciation warnings for imp package (#6637)
* Removed depreciation warnings for imp package

* Change try except
2019-03-19 14:44:44 +01:00
Baptiste Darthenay 91cd10c4a7 typo: added spaces on configuration docs (#6330) 2019-03-11 13:58:44 +01:00
Gourav Chawla(dotgourav) 4b25db2b42 Update copyright year in docs to be dynamic (#6618) 2019-03-11 13:58:11 +01:00
Paweł 4bdbf2b709 Page has no attribute site_id [Docs] (#6614)
* plugin_instance.position = new_plugin.position in CMSPlugin.copy_plugin
fix null position in copy_plugin method. CMSPlugin position not null +
default = 0

* CMSplugin.position not null

Django CMSPlugin.position null raises unorderable types: NoneType() <
int()

* fixed page has not attribute site_id
2019-03-11 13:57:52 +01:00
mobilepattern e9481b3e52 Update install documentation to use re_path (#6613)
* Update install documentation to use re_path 

The example with url(...) no longer works. The correct syntax is re_path(...).

* Changed documentation to based on feedback from Bartosz Płóciennik

The change to use re_path is only necessary when using Django 2.0. Reverted the change and added a note for Django 2.0 users.
2019-03-11 13:57:32 +01:00
Gourav Chawla(dotgourav) a613b53668 Fix typo in documentation (#6612)
- Fix typo in apphooks section of introduction docs
- Fix typo in index of introduction
2019-03-11 13:57:11 +01:00
Sascha Marcel Schmidt 54d1d7bbd4 Update install.rst (#6610)
change MIDDLEWARE_CLASSES to MIDDLEWARE as cms check expects
2019-03-11 13:56:38 +01:00
Robert Stein c5e105efda Fixed #6440 -- render_plugin_block template tag (#6472)
* - Fixes #6440 - `render_plugin_block` template tag
- removes unnecessary template
- updates changelog

* adapted changelog
2019-03-11 13:56:18 +01:00
schwobaseggl 63a0ac1891 Fix wrong field name (#6467)
`extended_page` is not a field of a `PageExtension`. This should be `extended_object`.
2019-03-11 13:55:46 +01:00
Vadim Sikora 7175ce9558 Fixed a bug with top-level object/embed/applet tags (#6497) 2019-03-11 13:55:17 +01:00
Bartosz Płóciennik f3fcf1c3ab Fixed travis matrix by moving menu test to allow_failures section (#6628)
* Moved test menu for python 2.7 to allow_failures section (#6625)

* Removed fast finish

* Add to include

* Restore fast_finish
2019-03-11 08:32:05 +01:00
Bartosz Płóciennik f7839c51d6 Fixed #6457 -- Fixed rendering of permission icons (#6624)
* use SVG icons

* add compatibility layer for Django-1.8
2019-03-07 08:46:24 +01:00
Bartosz Płóciennik 8007ce3d2f Release 3.6.0 (#6604) 2019-01-29 11:40:08 +01:00
Bartosz Płóciennik 2daeb7d63c Release 3.6.0rc3 (#6598)
* Release 3.6.0rc3

* Update translations
2019-01-24 11:47:37 +01:00
Bartosz Płóciennik 9e7c0517df Fixed #6595 -- missing clear cache for a menu after copied page (#6596)
* Add clear cache for copy page form

* Removed fixes for menu cache from changelog
2019-01-23 16:08:54 +01:00
41 changed files with 233 additions and 57 deletions
+1
View File
@@ -23,6 +23,7 @@ dist
.project
.coverage
.pydevproject
.vscode
.settings
/*.egg-info/
/*.egg/
+21 -2
View File
@@ -83,6 +83,27 @@ matrix:
env: DJANGO=2.1 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' AUTH_USER_MODEL='customuserapp.User'
- python: 3.6
env: TEST_DOCS=1 DJANGO=2.1 DATABASE_URL='sqlite://localhost/:memory:'
# DJANGO 2.2
- python: 3.5
env: DJANGO=2.2 DATABASE_URL='sqlite://localhost/:memory:'
dist: xenial
sudo: true
- python: 3.5
env: DJANGO=2.2 DATABASE_URL='mysql://root@127.0.0.1/djangocms_test'
- python: 3.6
env: DJANGO=2.2 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test'
- python: 3.6
env: DJANGO=2.2 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' AUTH_USER_MODEL='emailuserapp.EmailUser'
- python: 3.6
env: DJANGO=2.2 DATABASE_URL='postgres://postgres@127.0.0.1/djangocms_test' AUTH_USER_MODEL='customuserapp.User'
- python: 3.6
env: TEST_DOCS=1 DJANGO=2.2 DATABASE_URL='sqlite://localhost/:memory:'
dist: xenial
sudo: true
allow_failures:
- python: 2.7
env: DJANGO=1.11 DATABASE_URL='sqlite://localhost/:memory:'
exclude:
- python: 2.7
- python: 3.4
@@ -125,5 +146,3 @@ notifications:
irc:
- irc.freenode.org#django-cms
- irc.freenode.org#django-cms-sprint
webhooks:
- http://addons.us-iad-rs.aldryn.io/en/travis-endpoint/
+6
View File
@@ -1,3 +1,9 @@
=== 3.7.0 (unreleased) ===
* Introduced Django 2.2 support.
* Fixed test suite.
=== 3.6.0 (2019-01-29) ===
* Removed the ``cms moderator`` command.
+7 -2
View File
@@ -5,9 +5,9 @@ import os
from collections import OrderedDict
from django.core.management.base import BaseCommand, CommandParser
from django.core.management.color import no_style
from django.core.management.color import no_style, color_style
from cms.utils.compat import DJANGO_2_0
from cms.utils.compat import DJANGO_2_0, DJANGO_2_2
def add_builtin_arguments(parser):
@@ -37,6 +37,9 @@ def add_builtin_arguments(parser):
help='Raise on CommandError exceptions')
parser.add_argument('--no-color', action='store_true', dest='no_color', default=False,
help="Don't colorize the command output.")
if DJANGO_2_2:
parser.add_argument('--force-color', action='store_true', dest='force_color', default=False,
help="Colorize the command output.")
class SubcommandsCommand(BaseCommand):
@@ -85,6 +88,8 @@ class SubcommandsCommand(BaseCommand):
if options.get('no_color'):
command.style = no_style()
command.stderr.style_func = None
if DJANGO_2_2 and options.get('force_color'):
command.style = color_style(force_color=True)
if options.get('stdout'):
command.stdout._out = options.get('stdout')
if options.get('stderr'):
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
cmsWebpackJsonp([2],{195:function(n,a,e){var t=e(0);n.exports=function(n,a){if(a.length){var e=!1;""===a.val().trim()&&(e=!0),n.on("keyup keypress",function(){var t=n.val();window.UNIHANDECODER&&(t=window.UNIHANDECODER.decode(t)),!1===e&&""===a.val()&&(e=!0);var i=URLify(t,64);e&&a.val(i)}),n.trigger("keyup"),n.focus(),a.add(n).bind("change",function(){t(this).data("changed",!0)})}}},348:function(n,a,e){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var t=(e(71),e(79),e(16)),i=e(0),o=e.n(i),r=e(10),d=e.n(r),c=e(195),u=e.n(c);o()(function(){var n=o()("#id_title"),a=o()("#id_slug");u()(n,a),o()("div.loading").each(function(){o()(this).load(o()(this).attr("rel"))}),o()('input[type="hidden"]').each(function(){o()(this).parent(".form-row").hide()}),window.CMS.API.changeLanguage=function(e){var t=!0,i=!1;if(a.length&&(a.data("changed")||n.data("changed"))&&(i=!0),i){var o=gettext("Are you sure you want to change tabs without saving the page first?");t=confirm(o)}t&&(window.location.href=e)}});var s={$:o.a,Class:d.a,API:{Helpers:t.c},KEYS:t.d};window.CMS=s}},[348]);
cmsWebpackJsonp([2],{195:function(n,a,e){var t=e(0);n.exports=function(n,a){if(a.length){var e=!1;""===a.val().trim()&&(e=!0),n.on("keyup keypress",function(){var t=n.val();window.UNIHANDECODER&&(t=window.UNIHANDECODER.decode(t)),!1===e&&""===a.val()&&(e=!0);var i=URLify(t,64);e&&a.val(i)}),n.trigger("keyup"),n.focus(),a.add(n).bind("change",function(){t(this).data("changed",!0)})}}},352:function(n,a,e){"use strict";Object.defineProperty(a,"__esModule",{value:!0});var t=(e(72),e(81),e(16)),i=e(0),o=e.n(i),r=e(10),d=e.n(r),c=e(195),u=e.n(c);o()(function(){var n=o()("#id_title"),a=o()("#id_slug");u()(n,a),o()("div.loading").each(function(){o()(this).load(o()(this).attr("rel"))}),o()('input[type="hidden"]').each(function(){o()(this).parent(".form-row").hide()}),window.CMS.API.changeLanguage=function(e){var t=!0,i=!1;if(a.length&&(a.data("changed")||n.data("changed"))&&(i=!0),i){var o=gettext("Are you sure you want to change tabs without saving the page first?");t=confirm(o)}t&&(window.location.href=e)}});var s={$:o.a,Class:d.a,API:{Helpers:t.c},KEYS:t.d};window.CMS=s}},[352]);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+24 -2
View File
@@ -7,7 +7,19 @@ import $ from 'jquery';
import '../polyfills/array.prototype.findindex';
import nextUntil from './nextuntil';
import { toPairs, isNaN, debounce, findIndex, find, every, uniqWith, once, difference, isEqual } from 'lodash';
import {
includes,
toPairs,
isNaN,
debounce,
findIndex,
find,
every,
uniqWith,
once,
difference,
isEqual
} from 'lodash';
import Class from 'classjs';
import { Helpers, KEYS, $window, $document, uid } from './cms.base';
@@ -161,9 +173,19 @@ var Plugin = new Class({
$(items).filter('template').remove();
itemContents.each((index, el) => {
// Due to the way browsers interact with plugins and external code, the .data()
// method cannot be used on <object> (unless it's a Flash plugin), <applet> or <embed> elements,
// so we have to wrap them
if (includes(['OBJECT', 'EMBED', 'APPLET'], el.nodeName)) {
const element = $(el);
element.wrap('<cms-plugin class="cms-plugin-object-node"></cms-plugin>');
itemContents[index] = element.parent()[0];
}
// if it's a non-space top-level text node - wrap it in `cms-plugin`
if (el.nodeType === Node.TEXT_NODE && !el.textContent.match(/^\s*$/)) {
var element = $(el);
const element = $(el);
element.wrap('<cms-plugin class="cms-plugin-text-node"></cms-plugin>');
itemContents[index] = element.parent()[0];
@@ -1,2 +0,0 @@
{% load l10n %}
<div class="cms-plugin cms-plugin-{{ plugin.id|unlocalize }}">{{ inner }}</div>
+4 -1
View File
@@ -6,6 +6,7 @@ from classytags.core import Options, Tag
from classytags.helpers import InclusionTag
from cms.constants import PUBLISHER_STATE_PENDING
from django import VERSION as DJANGO_VERSION
from django import template
from django.conf import settings
from django.contrib.admin.views.main import ERROR_FLAG
@@ -129,8 +130,10 @@ def render_filter_field(request, field):
@register.filter
def boolean_icon(value):
BOOLEAN_MAPPING = {True: 'yes', False: 'no', None: 'unknown'}
EXTENSION = 'gif' if DJANGO_VERSION < (1, 9) else 'svg'
return mark_safe(
'<img src="%sicon-%s.gif" alt="%s" />' % (CMS_ADMIN_ICON_BASE, BOOLEAN_MAPPING.get(value, 'unknown'), value))
'<img src="%sicon-%s.%s" alt="%s" />' % (CMS_ADMIN_ICON_BASE, BOOLEAN_MAPPING.get(value, 'unknown'), EXTENSION,
value))
@register.filter
+3 -3
View File
@@ -342,15 +342,15 @@ class RenderPluginBlock(InclusionTag):
"""
name = 'render_plugin_block'
template = "cms/toolbar/render_plugin_block.html"
template = "cms/toolbar/plugin.html"
options = Options(
Argument('plugin'),
blocks=[('endrender_plugin_block', 'nodelist')],
)
def get_context(self, context, plugin, nodelist):
context['inner'] = nodelist.render(context)
context['plugin'] = plugin
context['content'] = nodelist.render(context)
context['instance'] = plugin
return context
+1
View File
@@ -26,6 +26,7 @@ class StdOverride(object):
def __exit__(self, type, value, traceback):
setattr(sys, 'std%s' % self.std, getattr(sys, '__std%s__' % self.std))
class StdoutOverride(StdOverride):
"""
This overrides Python's the standard output and redirects it to a StringIO
@@ -430,6 +430,15 @@ describe('CMS.Plugin', function() {
' and a text node\n' +
' </cms-plugin>'
]
},
{
pluginId: 109,
name: 'object node',
expected: [
'<cms-plugin class="cms-plugin-object-node cms-plugin cms-plugin-109">' +
'<object src="xx">109</object>' +
'</cms-plugin>'
]
}
];
@@ -43,4 +43,8 @@
<template class="cms-plugin cms-plugin-start cms-plugin-108"></template>
<div class="plugin-108">element</div>
<template class="cms-plugin cms-plugin-end cms-plugin-108"></template>
<template class="cms-plugin cms-plugin-start cms-plugin-109"></template>
<object src="xx">109</object>
<template class="cms-plugin cms-plugin-end cms-plugin-109"></template>
</div>
+3 -1
View File
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
import sys
import mock
from django.contrib.admin.models import CHANGE, LogEntry
from django.contrib.auth import get_user_model
@@ -855,7 +856,8 @@ class ApphooksTestCase(CMSTestCase):
request = self.get_request('/')
renderer = menu_pool.get_renderer(request)
nodes = renderer.get_nodes()
with mock.patch("menus.menu_pool.logger.error"):
nodes = renderer.get_nodes()
nodes_urls = [node.url for node in nodes]
self.assertTrue(reverse('sample-account') in nodes_urls)
self.assertFalse('/en/child_page/page2/' in nodes_urls)
+2 -1
View File
@@ -7,7 +7,8 @@ import socket
import sys
from django.utils.six.moves import StringIO
from sphinx.application import Sphinx, SphinxWarning
from sphinx.application import Sphinx
from sphinx.errors import SphinxWarning
try:
import enchant
+8 -8
View File
@@ -39,7 +39,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish')
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -62,7 +62,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish')
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -87,7 +87,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish', include_unpublished=True)
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -118,7 +118,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish', language='de')
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -152,7 +152,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish', language='de', include_unpublished=True)
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -221,7 +221,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish')
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -279,7 +279,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish', site=siteB.id)
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
@@ -310,7 +310,7 @@ class PublisherCommandTests(TestCase):
with StdoutOverride() as buffer:
# Now we don't expect it to raise, but we need to redirect IO
call_command('cms', 'publisher-publish')
lines = buffer.getvalue().split('\n') #NB: readlines() doesn't work
lines = buffer.getvalue().split('\n') # NB: readlines() doesn't work
for line in lines:
if 'Total' in line:
+4 -2
View File
@@ -10,8 +10,10 @@ from threading import local
from django.conf import settings
from django.urls import reverse, clear_url_caches
# Py2 and Py3 compatible reload
from imp import reload
try:
from importlib import reload
except ImportError:
from imp import reload
_urlconf_revision = {}
_urlconf_revision_threadlocal = local()
+4
View File
@@ -8,6 +8,10 @@ DJANGO_VERSION = django.get_version()
PYTHON_VERSION = platform.python_version()
# These means "less than or equal to DJANGO_FOO_BAR"
DJANGO_1_8 = LooseVersion(DJANGO_VERSION) < LooseVersion('1.9')
DJANGO_1_9 = LooseVersion(DJANGO_VERSION) < LooseVersion('1.10')
DJANGO_1_10 = LooseVersion(DJANGO_VERSION) < LooseVersion('1.11')
DJANGO_1_11 = LooseVersion(DJANGO_VERSION) < LooseVersion('2.0')
DJANGO_2_0 = LooseVersion(DJANGO_VERSION) < LooseVersion('2.1')
DJANGO_2_1 = LooseVersion(DJANGO_VERSION) < LooseVersion('2.2')
DJANGO_2_2 = LooseVersion(DJANGO_VERSION) < LooseVersion('3.0')
+3 -1
View File
@@ -12,6 +12,7 @@
# All configuration values have a default; values that are commented out serve
# to show the default.
import datetime
import os
import sys
@@ -57,9 +58,10 @@ source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
current_year = datetime.datetime.now().year
# General information about the project.
project = u'django cms'
copyright = u'2009-2017, Divio AG and contributors'
copyright = u'2009-{}, Divio AG and contributors'.format(current_year)
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
+9 -3
View File
@@ -65,9 +65,7 @@ We are working to improve the performance and reliability of our test suite. We'
problems, but need feedback from people using a wide range of systems and configurations in order
to benefit from their experience.
Please use the open issue `#3684 Test suite is error-prone
<https://github.com/divio/django-cms/issues/3684>`_ on our GitHub repository to report such
problems.
Please report any issues on our `GitHub repository <https://github.com/divio/django-cms/issues>`_.
If you can help *improve* the test suite, your input will be especially valuable.
@@ -96,6 +94,14 @@ when the entire suite is run. To work around this you can invoke the test class
and it should then run without errors.
``ERROR: zlib is required unless explicitly disabled using --disable-zlib, aborting``
------------------------------------------------------------------------------------------
If you run into that issue, make sure to install zlib using Homebrew::
brew install libjpeg zlib && brew link --force zlib
Advanced testing options
========================
+2 -2
View File
@@ -75,7 +75,7 @@ permissions.
.. note::
If you want to use your own admin class, make sure to exclude the live versions of the
extensions by using ``filter(extended_page__publisher_is_draft=True)`` on the queryset.
extensions by using ``filter(extended_object__publisher_is_draft=True)`` on the queryset.
Continuing with the example model above, here's a simple corresponding
``PageExtensionAdmin`` class::
@@ -223,7 +223,7 @@ In this example, we need to loop over the titles for the page, and populate the
# we now also need to get the titleset (i.e. different language titles)
# for this page
page = self._get_page()
titleset = page.title_set.filter(language__in=get_language_list(page.site_id))
titleset = page.title_set.filter(language__in=get_language_list(page.node.site_id))
# create a 3-tuple of (title_extension, url, title)
nodes = [(title_extension, url, title.title) for (
+2 -2
View File
@@ -221,7 +221,7 @@ in the ``TEMPLATES['OPTIONS']['context_processors']``:
Middleware
==========
in your :setting:`django:MIDDLEWARE_CLASSES` you'll need :class:`django:django.middleware.locale.LocaleMiddleware` -
in your :setting:`django:MIDDLEWARE` you'll need :class:`django:django.middleware.locale.LocaleMiddleware` -
it's **not** installed in Django projects by default.
Also add::
@@ -254,7 +254,7 @@ URLs
====
In the project's ``urls.py``, add ``url(r'^', include('cms.urls'))`` to the ``urlpatterns`` list. It should come after
other patterns, so that specific URLs for other applications can be detected first.
other patterns, so that specific URLs for other applications can be detected first. Note: when using Django 2.0 or later the syntax is ``re_path(r'^', include('cms.urls'))``
You'll also need to have an import for ``django.conf.urls.include``. For example:
+1 -1
View File
@@ -61,7 +61,7 @@ You must now remove the entry for the Polls application::
from your project's ``urls.py``.
Not only is it not only no longer even required there, because we reach the polls via the apphook
Not only is it not required there, because we reach the polls via the apphook
instead, but if you leave it there, it will conflict with the apphook's URL handling. You'll
receive a warning in the logs::
+1 -1
View File
@@ -208,7 +208,7 @@ For completeness, here is the full example:
url=admin_reverse('polls_poll_changelist'),
)
buttonlist.add_modal_button
buttonlist.add_modal_button(
name='Add a new poll',
url=admin_reverse('polls_poll_add'),
)
+1 -1
View File
@@ -12,7 +12,7 @@ get it working according to their own requirements.
These tutorials take you step-by-step through some key aspects of this work.
They're not intended to explain the :doc:`topics in depth </topics/index>`, or
provide :doc:`reference material </reference/index>`, but they will leave you
with a good idea of what it's possible to achieve in just a few steps, and how
with a good idea of what is possible to achieve in just a few steps, and how
to go about it.
Once you're familiar with the basics presented in these tutorials, you'll find
+8 -7
View File
@@ -221,33 +221,34 @@ add a text plugin with the content ``'hello world'``. This is done in English::
cms.constants
*************
.. module:: cms.constants
.. module:: cms.constants
.. data:: TEMPLATE_INHERITANCE_MAGIC
.. data:: TEMPLATE_INHERITANCE_MAGIC
The token used to identify when a user selects "inherit" as template for a
page.
.. data:: LEFT
.. data:: LEFT
Used as a position indicator in the toolbar.
.. data:: RIGHT
.. data:: RIGHT
Used as a position indicator in the toolbar.
.. data:: REFRESH
.. data:: REFRESH
Constant used by the toolbar.
.. data:: EXPIRE_NOW
.. data:: EXPIRE_NOW
Constant of 0 (zero) used for cache control headers
.. data:: MAX_EXPIRATION_TTL
.. data:: MAX_EXPIRATION_TTL
Constant of 31536000 or 365 days in seconds used for cache control headers
************
cms.app_base
************
+2 -2
View File
@@ -461,7 +461,7 @@ Example::
'fallbacks': ['de', 'fr'],
'public': True,
'hide_untranslated': True,
'redirect_on_fallback':False,
'redirect_on_fallback': False,
},
{
'code': 'de',
@@ -485,7 +485,7 @@ Example::
],
'default': {
'fallbacks': ['en', 'de', 'fr'],
'redirect_on_fallback':True,
'redirect_on_fallback': True,
'public': True,
'hide_untranslated': False,
}
+1
View File
@@ -380,6 +380,7 @@ django CMS constants used in toolbars
*************************************
.. module:: cms.constants
:noindex:
.. data:: REFRESH_PAGE
-1
View File
@@ -1,4 +1,3 @@
-f http://simple.crate.io/
MarkupSafe==0.23
Pygments==2.0.2
sphinx
+85
View File
@@ -0,0 +1,85 @@
.. _upgrade-to-3.7.0:
###################
3.7.0 release notes
###################
This release of django CMS concentrates on introducing support for Django 2.2 LTS.
*******************
What's new in 3.7.0
*******************
Improvements and new features
=============================
* introduced support for Django 2.2
* Fixed test suite.
*********************
How to upgrade to 3.7
*********************
We assume you are upgrading from django CMS 3.6.
Please make sure that your current database is consistent and in a healthy
state, and **make a copy of the database before proceeding further.**
Then run::
python manage.py migrate # to ensure that your database is up-to-date with migrations
python manage.py cms fix-tree
Check custom code and third-party applications for use of deprecated or removed functionality or
APIs (see above). Some third-party components may need to be updated.
Install the new version of django CMS from GitHub or via pip.
Run::
python manage.py migrate
to apply the new migrations.
***********************************
Create a new django CMS 3.7 project
***********************************
On the Divio Cloud
==================
The Divio Cloud offers an easy way to set up django CMS projects. In the `Divio Cloud Control Panel
<https://control.divio.com>`_, create a new django CMS project and **Deploy** it.
Using the django CMS Installer
==============================
.. note::
The django CMS Installer is not yet available for django CMS 3.6 or Django 2 or later.
This section will be updated or removed before the final release of django CMS 3.6.
****************************
Contributors to this release
****************************
* Daniele Procida
* Vadim Sikora
* Paulo Alvarado
* Bartosz Płóciennik
* Katie McLaughlin
* Krzysztof Socha
* Mateusz Kamycki
* Sergey Fedoseev
* Aliaksei Urbanski
* heppstux
* Chematronix
* Frank
* Jacob Rief
* Julz
+1
View File
@@ -13,6 +13,7 @@ makes changes to your database.
.. toctree::
:maxdepth: 1
3.7
3.6
3.5.3
3.5.2
+3 -1
View File
@@ -18,14 +18,16 @@ CLASSIFIERS = [
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Framework :: Django',
'Framework :: Django :: 1.11',
'Framework :: Django :: 2.0',
'Framework :: Django :: 2.1',
'Framework :: Django :: 2.2',
]
INSTALL_REQUIREMENTS = [
'Django>=1.11,<2.2',
'Django>=1.11,<3.0',
'django-classy-tags>=0.7.2',
'django-formtools>=2.1',
'django-treebeard>=4.3',
+2
View File
@@ -0,0 +1,2 @@
-r requirements_base.txt
Django>=2.2,<3.0
+2 -2
View File
@@ -1,7 +1,7 @@
coverage==4.2
python-coveralls==2.5.0
unittest-xml-reporting==1.11.0
Pillow==3.3.2
Pillow==5.2.0
django-treebeard>=4.3
argparse
dj-database-url
@@ -12,7 +12,7 @@ https://github.com/divio/djangocms-text-ckeditor/archive/master.zip
https://github.com/ojii/django-better-test/archive/8aa2407d097fe3789b74682f0e6bd7d15d449416.zip#egg=django-better-test
https://github.com/ojii/django-app-manage/archive/65da18ef234a4e985710c2c0ec760023695b40fe.zip#egg=django-app-manage
iptools
sphinx==1.4.5
sphinx==1.8.5
sphinxcontrib-spelling
pyflakes==1.1.0
pyenchant