Easy to use reddit like voting system for django models.
- Does not use GenericForeignKeys (which irritates me when making queries) Has vote_buttons_for templatetag, that generates html code for your object for vote buttons.
- Has, default_buttons.css which gives a shape your buttons as default, but you can override.
- Has, voting_script template tag, it generates javascript code to make ajax requests for voting. Automatically finds qhonuskan_votes views.
- voting_script tag also renders overridable show_not_authenticated_error function, so you can use your own error windows (jquery-ui etc.) via overriding it.
- Default buttons are pure css, there is no images. So it's lite.
Add qhonuskan_votes to your INSTALLED_APPS.
INSTALLED_APPS = ('...', '...', 'qhonuskan_votes')
Add VotesField, and add ObjectsWithScoresManager to your model.
from django.db import models from qhonuskan_votes.models import VotesField class MyModel(models.Model): votes = VotesField() objects_with_scores = ObjectsWithScoresManager() ... ...
Syncdb.
Extend your urls [1].
import qhonuskan_votes.urls from django.conf.urls.defaults import * urlpatterns = patterns('', ... ... url(r'^votes/', include(qhonuskan_votes.urls)), )
Load qhonuskan_votes templatetags from your template. You will need STATIC_PREFIX too.
{% load qhonuskan_votes static %} {% get_static_prefix as STATIC_PREFIX %}
Load default_buttons.css to give little shape to buttons
<link href="{{STATIC_PREFIX}}default_buttons.css" rel="stylesheet" type="text/css" />
After that line, if you wish you can override some properties
<style type="text/css"> div.vote_buttons { width: 40px; margin-right: 5px; float: left; border: 1px solid #666; } </style>
Load jquery to your template
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
After all, you can add voting_script template tag to your head section. It generates necessary javascript code for ajax requests.
{% voting_script %}
use vote_buttons_for_object template tag to create buttons.
{% for object in objects %} <div class="object"> {% vote_buttons_for object %} <div class="text"> {{ object.text }} </div> </div> {% endfor %}
For further information you can inspect example project at root of the repository.
[1] | To use the views for up voting and down voting you include the urls.py in your website's url patterns. You can serve qhonuskan_votes views wherever you want. Javascript files updates automatically to find qhonuskan_votes views. |