Skip to content

Commit

Permalink
Added support for plugins to register URL patterns for views.
Browse files Browse the repository at this point in the history
  • Loading branch information
mitar committed Mar 6, 2011
1 parent 28ab432 commit 802cccf
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
3 changes: 3 additions & 0 deletions cms/admin/pageadmin.py
Expand Up @@ -201,6 +201,9 @@ def get_urls(self):
pat(r'^(?P<object_id>\d+)/change_template/$', self.change_template), # copy dialog
)

if plugin_pool.get_all_plugins():
url_patterns += plugin_pool.get_patterns()

url_patterns = url_patterns + super(PageAdmin, self).get_urls()
return url_patterns

Expand Down
11 changes: 11 additions & 0 deletions cms/plugin_base.py
Expand Up @@ -211,6 +211,17 @@ def icon_alt(self, instance):
the plugin object in a text editor.
"""
return "%s - %s" % (unicode(self.name), unicode(instance))

def get_plugin_urls(self):
"""
Return URL patterns for which the plugin wants to register
views for.
"""
return []

def plugin_urls(self):
return self.get_plugin_urls()
plugin_urls = property(plugin_urls)

def __repr__(self):
return smart_str(self.name)
Expand Down
21 changes: 21 additions & 0 deletions cms/plugin_pool.py
Expand Up @@ -3,7 +3,11 @@
from cms.plugin_base import CMSPluginBase
from cms.utils.helpers import reversion_register
from django.conf import settings
from django.conf.urls.defaults import url, patterns, include
from django.template.defaultfilters import slugify
from django.utils.encoding import force_unicode
from django.utils.importlib import import_module
from django.utils.translation import get_language, deactivate_all, activate

class PluginPool(object):
def __init__(self):
Expand Down Expand Up @@ -95,7 +99,24 @@ def get_plugin(self, name):
"""
self.discover_plugins()
return self.plugins[name]

def get_patterns(self):
# We want untranslated name of the plugin for its slug so we deactivate translation
lang = get_language()
deactivate_all()

url_patterns = []
for plugin in self.get_all_plugins():
p = plugin()
slug = slugify(force_unicode(p.name))
url_patterns += patterns('',
url(r'^plugin/%s/' % (slug,), include(p.plugin_urls)),
)

# Reactivate translation
activate(lang)

return url_patterns

plugin_pool = PluginPool()

0 comments on commit 802cccf

Please sign in to comment.