Overview

django-dburlresolvers

A URL resolver which store the URL patterns in database, which means a webmaster can define some URLs.

Installing

Install package from pypi:

$ easy_install django-dburlresolvers

Put dbresolver into your installed applications:

INSTALLED_APPS = (
    ...
    'dbresolver',
)

Change the project urls.py file like this:

from dbresolver import get_dbresolver_patterns

urlpatterns = patterns('',
    ... # your URLs
)

urlpatterns += get_dbresolver_patterns()

Usage

Register some views of your project to get available in dbresolver. You may register it manually or automatically (by autodiscovering):

  • Manually: Using the dbresolver API directly:

    >>> from dbresolver import register_view
    >>> from fooapp.views import foo_listing
    >>> register_view(foo_listing, 'Foo listing')
    
  • Automatically: Put this code in your project (we recommended in the project urls.py):

    from dbresolver import autodiscover_views
    autodiscover_views()
    

    You need to define an especial views_to_register method, like ilustrate this example:

    def foo_listing(request):
        foo_list = FooModel.objects.all()
        return render_to_response('fooapp/foo_listing.html',
                                {'foo_list': foo_list},
                                 context_instance=RequestContext(request))
    
    def views_to_register():
        """ returns views to be registered with dbresolver """
        return (
            (foo_listing, _('Foo listing')),
        )
    

Also you can register generic views with parameters. For example, imagine you have a view like this:

def render_template(request, template_name=None):
    try:
        return direct_to_template(request, template=template_name)
    except TemplateDoesNotExist:
        raise Http404()

You may register the view with a parameter which be defined for admin user:

>>> from configfield import params
>>> register_view(render_template, 'Generic view to render a template',
                  params=(
                      params.Template(
                          name='template_name',
                          label='Template to be rendered',
                      ),
                  ))

If you want autoregistering of that view, the code was like this:

def views_to_register():
    return (
        {'view': render_template,
         'label': 'Generic view to render a template',
         'params': (
             params.Template(name='template_name', label='Template to be rendered'),
        )},

Now you only have to enter on admin site to create URL patterns attached to views. You can use both Django default regular expressions and simpler surlex expressions.