An open API service indexing awesome lists of open source software.

https://github.com/callowayproject/django-kamasutra

A application to position objects anywhere on a page.
https://github.com/callowayproject/django-kamasutra

Last synced: 3 months ago
JSON representation

A application to position objects anywhere on a page.

Awesome Lists containing this project

README

          

|BUILD|_

.. |BUILD| image::
https://secure.travis-ci.org/callowayproject/django-kamasutra.png?branch=master
.. _BUILD: http://travis-ci.org/#!/callowayproject/django-kamasutra

Backwards incompatible changes made in version 0.2.2
====================================================

**COMBINE_STRING** is now used to build the template list when using
``PositionContent.render`` or ``render_content`` template tag.

Before:

/positions/my_position/__.html

New:

/positions/my_position/ **** .html

Installation
============

Using PIP::

pip install django-kamasutra

or download the app `here `_ ::

python setup.py install

Add **positions** to your settings **INSTALLED_APPS**::

INSTALLED_APPS = (
...
'positions',
...
)

Add **positions** to your URLS::

import positions.urls

urlpatterns += patterns('',
url(r'^positions/', include(positions.urls)),
)

Run syncdb::

>>> ./manage.py syncdb

Getting Started
===============

Creating your first position
----------------------------

The minimum required arguments to create a positions is a `name`, which is a `SlugField`.

::

from positions.models import Position

position = Position.objects.create(name="MyPosition")

Add something to your Position
------------------------------

The position manager has a `add_object` method that takes, at minimum, 2 arguments, `position` and `obj`

* **position** should be a `positions.Position` instance
* **obj** can be any model instance

::

from myapp.models import MyApp

obj = MyApp.objects.get_latest()

Position.objects.add_object(position=position, obj=obj)

.. note::

The `Position` model can define which types of objects that can be added.
Therefore when adding objects to a position, make sure the content types
is allowed by the `Position` instance.

Retrieve your position content
------------------------------

The position manager has a `get_content` method that takes at least 1 argument, `position`.

* **position** should be a `positions.Position` instance

::

position = Position.objects.get(name="MyPosition")

content = Position.objects.get_content(position=position)

Retrieve your position content via templatetag
----------------------------------------------

::

{% get_position_content position as content %}

`get_position_content` expects [position] [as] [varname]

* **position** can be a positions.Position instance or a name of a position

::

Position {{ position }} has the following content:


    {% for obj in content %}
  • {{ obj }}

  • {% endfor %}

.. note::

By default the object instance will be returned, although returning the positions.PositionContent instance, which holds the generic relation between position and the object, is also possible

::

{% get_position_content position as content as_content_type=False %}