Skip to content

Instantly share code, notes, and snippets.

@guillaumepiot
Last active August 29, 2015 14:06
Show Gist options
  • Save guillaumepiot/89c61981ffd9848ffda7 to your computer and use it in GitHub Desktop.
Save guillaumepiot/89c61981ffd9848ffda7 to your computer and use it in GitHub Desktop.
DJANGO - Decorate "include" in urlpatterns
from django.core.urlresolvers import RegexURLResolver
from django.contrib.auth.decorators import login_required
from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
def decorate_url(decorator, urlconf):
'''Recreates the url object with the callback decorated'''
# urlconf autoresolves names, so callback will always be a function
return url(urlconf._regex, decorator(urlconf.callback), urlconf.default_args, urlconf.name)
def decorate_include(decorator, urlpatterns):
urls = [
decorate_url(decorator, urlconf) if not isinstance(urlconf, RegexURLResolver) else decorate_include(decorator, urlconf)
for urlconf in urlpatterns[0].urlpatterns
]
return (urls,) + urlpatterns[1:]
urlpatterns = patterns('',
# Example
url(r'^', decorate_include(login_required, include('cmsbase.urls', namespace='cms'))),
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment