Writing a flashcard application is almost a rite of passage for django users. You create a simple Card model, you create a quiz view and template and you call it a day. A simple application and not very useful.

Django-memorize adds a more advanced way of learning your flashcards (or whatever items you'd like) with the theory of [http://en.wikipedia.org/wiki/Spaced_repetition spaced repetition]. The [http://www.supermemo.com/english/ol/sm2.htm SuperMemo 2 algorithm] is currently used. Flashcard web apps have just gotten better and easier.

=Installation=
  # Download the [http://code.google.com/p/django-memorize/downloads/list latest version].
  # Extract and run `python setup.py install`.
  # Add `memorize` to `INSTALLED_APPS` list.

=Usage=

==Add an Item to Practice==
Let's assume you have a flashcard web app with a card model:

{{{
from django.db import models
from django.contrib.auth.models import User

class Card(models.Model):
    front = models.CharField(max_length=255)
    back = models.CharField(max_length=255)
    user = models.ForeignKey(User)

}}}

To begin practicing a new card, save a practice object for your flashcard.    

{{{
from memorize.models import Practice

card = Card(front="When was Sgt. Pepper released?", back="1967", user=request.user)
practice = Practice(item=card, user=card.user)
practice.save()

}}}

==Start Practicing==
The view `memorize.views.next_practice_item` does all the work of determining what the next item a user should practice. You just need to provide a template file. Add an item to your urls.py file:

{{{
urlpatterns += patterns(
    'memorize.views',
    url(r'^item/next/$', 'next_practice_item', {'template': 'memorize/next.html'}, name='next-song'),
)
}}}

===Template Variables Provided===
<dl>
    <dt>form</dt>
    <dd>A `memorize.forms.RatingsForm` instance you use to save the performance on this practice instance.</dd>

    <dt>item</dt>
    <dd>Your original item. Use this to get your information (e.g., `card.front` information)</dd>

    <dt>practice</dt>
    <dd>The practice row.</dd>
</dl>

==Saving Feedback==
The key to spaced repetition algorithms is using your past performance to determine when is the optimal time to reshow an item. If you used the `next_practice_item` the template will have a `form` object that provides all the relative information.

The view `memorize.views.process_rating` will process the data. Add this view to your urls.py file.

Example:
{{{
<form action="{% url memorize.views.process_rating %}" method="post">
    {{ form }}
</form>
}}}
