Package: django_view_hierarchy
=============================Django DjangoViewHiearchy=============================.. image:: https://img.shields.io/pypi/v/django_view_hierarchy.svg:target: https://pypi.python.org/pypi/django_view_hierarchy/.. image:: https://travis-ci.org/michaelpb/django_view_hierarchy.svg?branch=master:target: https://travis-ci.org/michaelpb/django_view_hierarchy.. image:: https://codecov.io/gh/michaelpb/django_view_hierarchy/branch/master/graph/badge.svg:target: https://codecov.io/gh/michaelpb/django_view_hierarchy* **WIP:** This app is still being developed and documented!* **NOTE:** Presently *only* supports Python 3.5+ and Django 1.9+ (see `issue#1 <https://github.com/michaelpb/django_view_hierarchy/issues/1>`_)Hierarchical view system for Python Django.Define an arbitrary hierarchical URL structure in your ``urls.py``, definehow breadcrumbs get generated for each view, and then this package willautomatically generate an ``urlpatterns`` list and breadcrumbs attached tothe request object that can be easily rendered in any page, to easily link"up" the view hierarchy.Features------------* Supports both Class Based Views and simple functional views* Auto-generates an ``urlpatterns`` for any nested URL pattern, keepingyour ``urlpatterns`` more DRY instead of repeating common URL patternelements* Automatically generates breadcrumbs with both title and URL available as``request.breadcrumbs`` for each node in ancestor tree* Simple Python package: No configuration changes neededQuick start------------**Overview:**1. Install django_view_hierarchy and put in requirements file2. Using decorators or mixins, enhance some views to be "breadcrumb aware"3. Create a view hierarchy in an urlpatterns including these views---------------1. Install~~~~~~~~~~.. code-block:: bashpip install django_view_hierarchy2. Use decorator or mixin to add view hierarchy to views~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~For Class Based Views, do the following:.. code-block:: pythonfrom django.views import Viewfrom django_view_hierarchy.views import BreadcrumbMixinclass UserList(BreadcrumbMixin, View):breadcrumb = 'All users'    # StaticFor more complicated examples, you may need to specify a breadcrumb thatinvolves fetching data from the DB or giving your view a name:.. code-block:: pythonclass UserDetailView(BreadcrumbMixin, View):view_name = 'user_details'  # Optionally give view a namedef get_breadcrumb(self):pk = self.kwargs['pk']user = User.objects.get(pk=pk)return user.usernameFor function-style views, you can do the same thing as follows:.. code-block:: pythonfrom django_view_hierarchy.decorators import breadcrumb@breadcrumb('Users')def user_list_view(request):return render_to_response('...')@breadcrumb(lambda request, pk: User.objects.get(pk).username, 'user_details')def user_detail_view(request, pk):return render_to_response('...')3. Configure hierarchy in urls.py~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~For example, to make a set of views like:* ``/users/``  for a list of all users* ``/users/<userid>/``  for a particular user* ``/users/<userid>/followers/``  for a sub-page of a particular user,showing off their followersThe hierarchy can be built like:.. code-block:: pythonfrom django_view_hierarchy.helpers import view_hierarchyurlpatterns = view_hierarchy({'users': {'': UserListView,'(?P<pk>\d+)': {'': UserDetailView,'followers': user_followers_view,},},})Note that Class Based Views *should not* include `as_view`, this will bedone automatically.5. Use breadcrumbs in views and/or templates~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.. code-block:: html<ul>{% for breadcrumb in request.breadcrumbs %}<li><a href="{{ breadcrumb.url }}">{{ breadcrumb.title }}</a></li>{% endfor %}</ul>Credits-------Tools used in creating this package:*  Cookiecutter_*  `cookiecutter-djangopackage`_.. _Cookiecutter: https://github.com/audreyr/cookiecutter.. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackageHistory-------0.1.0 (2017-11-10)++++++++++++++++++* First release on PyPI.