####### file: newpatern/defaults.py #######
from django.conf.urls.defaults import url
class AddNewUrl(object):
def __init__(self,prefix,view,*t):
self.prefix = prefix
self.view = view
self.t = t
def __call__(self,*t,**k):
if 'before' in self.prefix :
ret = self.prefix['before'](*t,**k)
if ret:
return ret
ret = self.view(*t,**k)
if 'after' in self.prefix:
self.prefix['after'](*t,**k)
return ret
def newpatterns(prefix, *args):
pattern_list = []
for t in args:
pattern_list.append(newurl(prefix, *t))
return pattern_list
def newurl(prefix,regex,view,*t):
return url(regex,AddNewUrl(prefix,view,*t),*t)
def classpatterns(cp):
o_cp = cp()
cp_prefix = {}
if hasattr(o_cp,'before_cp'):
before_cp = getattr(o_cp,'before_cp')
if callable(before_cp):
cp_prefix['before'] = before_cp
func_list = ()
for item in dir(o_cp):
if item.startswith('cp__'):
item_func = getattr(o_cp,item)
if callable(item_func):
func_list = func_list + ((r'^'+item[4:]+'/$',item_func),)
#raise str(func_list)
return newpatterns(cp_prefix,*func_list)
##### in your project ####################
##### file: ajax/vurls.py ################
from newpatern.defaults import newpatterns, classpatterns
from django.http import HttpResponse
class Views(object):
def before__cp(self,request):
pass #any code running before /test1 or /test2
def cp__test1(self,request):
return HttpResponse('This is URL of TEST1!');
def cp__test2(self,request):
return HttpResponse('This is URL of TEST2!');
urlpatterns = classpatterns(Views)
##### file: urls.py #####################
# just Add in you patterns list
(r'^ajax/',include('ajax.vurls'))
#### Respons #####
# GET ajax/test1/
# Respons:This is URL of TEST1!
# GET ajax/test2/
# Respons:This is URL of TEST2!
Comments
Looks a bit ugly.
#
Using newpatterns you can write more expandable code
#