We maintain multiple Django applications, and we use the excellent built-in include mechanism to allow one urls.py to borrow from another:

http://docs.djangoproject.com/en/dev/topics/http/urls/

If you scroll down to the section entitled "Passing extra options to include," you will see this annoying limitation:

'''
Note that extra options will always be passed to every line in the included URLconf, regardless of whether the line's view actually accepts those options as valid. For this reason, this technique is only useful if you're certain that every view in the included URLconf accepts the extra options you're passing.
'''

My snippet overcomes this limitation, allowing you to extend individual urls without polluting the namespace. The function also has the nice side effect of validating that the parent hasn't changed names on you.

fromdjango.core.urlresolversimportRegexURLResolverdefextend(root_resolver,extra_parm_dct,require_matches=True):''' Extend a resolver to have extra parameters passed in by a per-name basis, and also validate that names exist so that child application can essentially validate the API of the app whose urls it is including root_resolver: should be url w/include (see example below) extra_parm_dct: keys: should be names defined for reverse calls values: dictionaries of extra parameters to be sent to views require_matches: if True, raise exception if some names are not found Limitations: 1) only tested on python 2.5, django 1.1 2) modifies resolvers directly, does not clone them Example usage: extend(url(r'', include('member.urls')), { 'make_payment': {'make_payment_form': QuickEnrollPaymentForm}, 'home_page': {}, # simply must exist } ), '''ifnotisinstance(root_resolver,RegexURLResolver):raiseTypeError('Expected RegexURLResolver argument')names_to_extend=set(extra_parm_dct.keys())def_extend(resolver):forpatterninresolver.url_patterns:ifisinstance(pattern,RegexURLResolver):_extend(pattern)else:name=pattern.nameifnameinextra_parm_dct:extra_args=extra_parm_dct[name]pattern.default_args.update(extra_args)names_to_extend.discard(name)_extend(root_resolver)ifrequire_matchesandlen(names_to_extend)>0:raiseException('The following names do not exist in extended urlconf: %s'%names_to_extend)returnroot_resolver