.. _ref-example:

=============
Demo projects
=============

Django-comments-xtd comes with three demo projects:

1. **simple**: Single model with **non-threaded** comments
2. **simple_threads**: Single model with **threaded** comments up to level 2
3. **multiple**: Several models with comments, and a maximum thread level defined on per app.model basis.


You may want to have a look at the `example sites dir <http://github.com/danirus/django-comments-xtd/tree/master/django_comments_xtd/demos>`_ in the repository.


.. index::
   pair: Demo; Setup 

Demo sites setup
================

The recommended way to run the demo sites is in its own `virtualenv <http://www.virtualenv.org/en/latest/>`_. Once in a new virtualenv, clone the code and cd into any of the 3 demo sites. Then run the install script and launch the dev server::

    $ git clone git://github.com/danirus/django-comments-xtd.git
    $ cd django-comments-xtd/django_comments_xtd/demos/[simple|simple_thread|multiple]
    $ sh ./install.sh (to syncdb, migrate and loaddata)
    $ python manage.py runserver

By default:
 * There's an ``admin`` user, with password ``admin``
 * Emails are sent to the ``console.EmailBackend``


.. index::
   single: Simple
   pair: Simple; Demo

Simple demo site
================

The **simple** demo site is a project with just one application called **articles** with an **Article** model whose instances accept comments. The example features: 
 * Comments have to be confirmed by email before they hit the database. 
 * Commenters may request follow up notifications.

1. Visit http://localhost:8000/ and look at your articles' detail page. 

2. Try to post comments:

 * Logged out, to receive confirmation requests by email

 * Logged in, to get your comments accepted without requiring confirmation

3. When adding new articles in the admin interface be sure to tick the box *allow comments*, otherwise comments won't be allowed.


.. index::
   single: Simple_threads
   pair: Simple_treads; Demo

Simple with threads
===================

The **simple_threads** demo site extends the **simple** demo functionality featuring:
 * Thread support up to level 2

1. Visit http://localhost:8000/ and look at the first article page with 9 comments.

2. See the comments in the admin interface too:

 * The first field represents the thread level.
 * When in a thread it mentions the parent comment.


.. index::
   single: Multiple
   pair: Multiple; Demo

Multiple demo site
==================

The **multiple** demo allows users post comments to three different type of instances: stories, quotes, and project releases. Stories and quotes belong to the **blog app** while project releases belong to the **projects app**. The demo shows the blog homepage with the last 5 comments posted to either stories or quotes and a link to the complete paginated list of comments posted to the blog. It features:
 * Definition of maximum thread level on a per app.model basis.
 * Use of comments_xtd template tags (get_xtdcomment_count, render_last_xtdcomments, get_last_xtdcomments) and filter (render_markup_comment).

1. Visit http://localhost:8000/ and take a look at the **Blog** and **Projects** pages. 

 * The **Blog** contains **Stories** and **Quotes**. Instances of both models have comments. The blog index page shows the **last 5 comments** posted to either stories or quotes. It also gives access to the **complete paginated list of comments**. 

 * Project releases have comments as well but are not included in the complete paginated list of comments shown in the blog. 

2. To render the last 5 comments the site uses:

 * The templatetag ``{% render_last_xtdcomments 5 for blog.story blog.quote %}``

 * And the following template files from the ``demos/multiple/templates`` directory: 

  * ``django_comments_xtd/blog/story/comment.html`` to render comments posted to **stories**

  * ``django_comments_xtd/blog/quote/comment.html`` to render comments posted to **quotes**

 * You may rather use a common template to render comments:

  * For all blog app models: ``django_comments_xtd/blog/comment.html``

  * For all the website models: ``django_comments_xtd/comment.html``

3. To render the complete paginated list of comments the site uses:

 * An instance of a generic ``ListView`` class declared in ``blog/urls.py`` that uses the following queryset:

  * ``XtdComment.objects.for_app_models("blog.story", "blog.quote")``

4. The comment posted to the story **Net Neutrality in Jeopardy** starts with a specific line to get the content rendered as reStructuredText. Go to the admin site and see the source of the comment; it's the one sent by Alice to the story 2.

 * To format and render a comment in a markup language, make sure the first line of the comment looks like: ``#!<markup-language>`` being ``<markup-language>`` any of the following options:

  * markdown
  * restructuredtext
  * linebreaks

 * Then use the filter ``render_markup_comment`` with the comment field in your template to interpret the content (see ``demos/multiple/templates/comments/list.html``).
