-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
__init__.py
73 lines (64 loc) · 3.27 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from django.conf import settings as d_settings
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import get_resolver, get_script_prefix, \
NoReverseMatch
from django.utils.encoding import iri_to_uri
from moderatormodels import *
from pagemodel import *
from permissionmodels import *
from placeholdermodel import *
from pluginmodel import *
from titlemodels import *
import django.core.urlresolvers
# must be last
from cms import signals as s_import
def validate_settings():
if not "django.core.context_processors.request" in d_settings.TEMPLATE_CONTEXT_PROCESSORS:
raise ImproperlyConfigured('django-cms needs django.core.context_processors.request in settings.TEMPLATE_CONTEXT_PROCESSORS to work correctly.')
if not 'mptt' in d_settings.INSTALLED_APPS:
raise ImproperlyConfigured('django-cms needs django-mptt installed.')
if 'cms.middleware.multilingual.MultilingualURLMiddleware' in d_settings.MIDDLEWARE_CLASSES and 'django.middleware.locale.LocaleMiddleware' in d_settings.MIDDLEWARE_CLASSES:
raise ImproperlyConfigured('django-cms MultilingualURLMiddleware replaces django.middleware.locale.LocaleMiddleware! Please remove django.middleware.locale.LocaleMiddleware from your MIDDLEWARE_CLASSES settings.')
def validate_dependencies():
# check for right version of reversions
if 'reversion' in d_settings.INSTALLED_APPS:
from reversion.admin import VersionAdmin
if not hasattr(VersionAdmin, 'get_urls'):
raise ImproperlyConfigured('django-cms requires never version of reversion (VersionAdmin must contain get_urls method)')
def remove_current_root(url):
current_root = "/%s/" % get_language()
if url[:len(current_root)] == current_root:
url = url[len(current_root) - 1:]
return url
def monkeypatch_reverse():
django.core.urlresolvers.old_reverse = django.core.urlresolvers.reverse
def new_reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None):
url = ''
i18n = 'cms.middleware.multilingual.MultilingualURLMiddleware' in settings.MIDDLEWARE_CLASSES
lang = None
if isinstance(viewname, basestring) and viewname.split(":")[0] in dict(settings.LANGUAGES).keys():
lang = viewname.split(":")[0]
try:
url = django.core.urlresolvers.old_reverse(viewname, urlconf=urlconf, args=args, kwargs=kwargs, prefix=prefix, current_app=current_app)
if lang:
url = "/%s%s" % (lang, url)
except NoReverseMatch, e:
if i18n:
if not lang:
try:
lang = get_language()
ml_viewname = "%s:%s" % ( lang, viewname)
url = django.core.urlresolvers.old_reverse(ml_viewname, urlconf=urlconf, args=args, kwargs=kwargs, prefix=prefix, current_app=current_app)
return url
except NoReverseMatch:
pass
raise e
url = remove_current_root(url)
return url
django.core.urlresolvers.reverse = new_reverse
validate_dependencies()
validate_settings()
monkeypatched = False
if not monkeypatched:
monkeypatch_reverse()
monkeypatched = True