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`_.

.. _`default regular expressions`: http://docs.djangoproject.com/en/dev/topics/http/urls/
.. _`surlex expressions`: http://codysoyland.com/projects/surlex/documentation/

