django-preferences 1.0.0
Django app allowing users to set app specific preferences through the admin interface.
License: BSD

Django Preferences
==================
**Django app allowing users to set app specific preferences through the admin interface.**

.. image:: https://travis-ci.org/praekelt/django-preferences.svg?branch=develop
    :target: https://travis-ci.org/praekelt/django-preferences

.. image:: https://coveralls.io/repos/github/praekelt/django-preferences/badge.svg?branch=develop
    :target: https://coveralls.io/github/praekelt/django-preferences?branch=develop

.. image:: https://badge.fury.io/py/django-preferences.svg
    :target: https://badge.fury.io/py/django-preferences

Provides singleton admin views for Preferences objects and a simple interface to preference values.
Singleton views ensure only one preference instance per site is available for each ``Preferences`` class.

..

    **Requires** and supports `Django's "sites" framework <https://docs.djangoproject.com/en/dev/ref/contrib/sites/>`_, which means you can have multiple preferences, each associated with a particular site.

.. contents:: Contents
    :depth: 5

Requirements
------------

#. Python 2.7, 3.5-3.7

#. Django 1.11, 2.0, 2.1

#. django.contrib.sites


Installation
------------

#. Install or add ``django-preferences`` to your Python path.

#. Add ``preferences`` to your ``INSTALLED APPS`` setting.

#. Add ``django.contrib.sites`` to your ``INSTALLED APPS`` setting. django-preferences associates preferences to specific sites and thus requires Django's "sites" framework to be installed.

#. Optionally, add ``preferences.context_processors.preferences_cp`` to your template option settings. This will automatically add a ``preferences`` variable to your template context::

     TEMPLATES = [{
         ...
         'OPTIONS': {
             'context_processors': [
                 ...
                 'preferences.context_processors.preferences_cp',
             ],
         },
     }]

Usage
-----
To create preferences for your app create a Django ORM model as usual, with the model inheriting from ``preferences.models.Preferences``. Also specify ``preferences.models`` as your model's module::

    from django.db import models
    from preferences.models import Preferences

    class MyPreferences(Preferences):
        portal_contact_email = models.EmailField()

Admin classes are specified as per usual, except that they have to inherit from or be registered with ``preferences.admin.PreferencesAdmin``, i.e.::

    from django.contrib import admin

    from preferences.admin import PreferencesAdmin
    from <my_app>.models import MyPreferences

    admin.site.register(MyPreferences, PreferencesAdmin)

When your model is registered with admin it will show up under the *Preferences* app label in Django admin.

Preferences can be accessed in Python by importing the ``preferences`` module and traversing to your required preference in the form ``preferences.<ModelName>.<field>``, i.e.::

    from preferences import preferences

    portal_contact_email = preferences.MyPreferences.portal_contact_email


If you've specified the ``preferences.context_processors.preferences_cp`` as a `TEMPLATES <https://docs.djangoproject.com/en/1.11/topics/templates>`_ you can similarly access your preferences within templates through the ``preferences`` variable, i.e.::

    {{ preferences.MyPreferences.portal_contact_email }}

Authors
=======

Praekelt Consulting
-------------------
* Shaun Sephton
* Euan Jonker
* Hedley Roos

Changelog
=========

next
----
#. Django 2 and Python 3.5 compatibility. Django 1.9 is no longer supported.


1.0.0
---
#. Support Django 1.11, 2.0 & 2.1 remove support for Django < 1.11
#. Support Python 2.7, 3.5-3.7
#. Added tests coverage

0.2
---
#. Move to tox for tests.
#. Django 1.9 to 1.11 support. The official minimum supported version is 1.9.

0.1
---
#. Cleanup and fixing of tests courtesy of senyor.
#. Rewrite distinct query so it works with Oracle backend.

0.0.6
-----
#. Better packaging.

0.0.5 (2011-08-17)
------------------
#. Added sites support.
#. Added unittests.

0.0.4 (2011-08-11)
------------------
#. Cleanup. Docs polish.

0.0.3
-----
#. Spelling correction, thanks tiktuk.

0.0.2
-----
#. Doc update to indicate importance of placing url include before admin url include.

0.0.1
-----
#. First super alpha release.